开发者工具 · JSON / 数据格式

JSON 转 TOML

双向互转

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 92 次使用
JSONTOML 编辑任一侧实时互转
JSON JavaScript Object Notation
TOML Tom's Obvious Minimal Language
就绪 · 左侧填 JSON 或右侧填 TOML,另一侧自动互转,全程本地处理
第一节

关于本工具

About

在配置 Rust 项目的 `Cargo.toml` 时,手写 TOML 结构常因缩进或数组括号错误导致解析失败。这个工具把 JSON 粘贴进来,直接转成等价的 TOML 格式,保留嵌套层级与数据类型,也支持反向转换。转换过程全在浏览器内执行,JSON 内容不会离开本地机器。

使用场景

云配置跨语言迁移

运维在 Terraform 里写 HCL 配置,新来的后端同学只认 TOML 格式的部署参数。手动改 200 行的 JSON 转 TOML,漏掉一个嵌套层级导致服务启动失败。本工具保留数组和表结构,把嵌套的 `resource.aws_instance` 直接映射成 `[resource.aws_instance]`,缩进和引号自动对齐,改完直接 `cp` 进项目根目录,不用逐行比对缩进。

游戏本地化文件对齐

策划用 JSON 管理多语言文本,翻译外包团队只给 TOML 格式的译文包。两个文件键名顺序不同,合并时总丢字段。本工具双向互转,把 JSON 的 `{ "zh": "开始" }` 转成 TOML 的 `zh = "开始"`,再反向转回 JSON 时保持键名一致。游戏上线前最后一天,用这个把 8 个语言文件统一成 TOML 发给 QA,没出现乱码或键缺失。

Python 脚本参数管理

数据分析师写了个爬虫,配置文件是 JSON,但调度平台 Airflow 只认 TOML 的 `[default]` 段。每次改代理 IP 和超时时间,得手动把 JSON 的 `"timeout": 30` 改成 TOML 的 `timeout = 30`,忘了改引号就报错。本工具把整个 JSON 对象转成 TOML 的 `[default]` 表,保留注释占位,改完直接 `configparser` 读取,不报 `KeyError`。

Cargo 依赖版本回退

Rust 项目 `Cargo.toml` 里依赖了 `serde = "1.0"`,但 CI 日志显示最新版有 API 破坏。需要把依赖锁回 `1.0.130`,而同事给的版本清单是 JSON 格式的 `{"serde": "1.0.130"}`。本工具把 JSON 转成 TOML 的 `[dependencies]` 段,保留版本号字符串,直接替换 `Cargo.toml` 对应行,不破坏已有的 `[features]` 和 `[profile]` 配置。

GitHub Action 密钥注入

CI/CD 流程里,GitHub Secrets 只能存 JSON 字符串,但自建 runner 的配置读取器只吃 TOML。每次部署前得手动把 `{"db_url":"postgres://..."}` 转成 `[database] url = "postgres://..."`,转错引号导致连接失败。本工具把 JSON 键值对转成 TOML 表,保留字符串转义,复制粘贴进 `.env.toml` 后直接 `toml-rs` 解析,不报 `invalid escape`。

第二节

使用指南

Getting Started

使用步骤

  1. 1在左侧编辑框粘贴或键入 JSON 文本,右侧预览区同步显示对应 TOML 结构,无需额外操作
  2. 2点击「格式化」按钮,左侧 JSON 自动缩进对齐,右侧 TOML 同步重排层级
  3. 3点击「复制 TOML」按钮,右侧内容写入剪贴板,按钮短暂变为「已复制」反馈
  4. 4如需反向转换,点击输入框上方的「TOML → JSON」切换标签,粘贴 TOML 后重复上述步骤

输入输出示例

输入输出说明
{"name": "Tom", "age": 25, "active": true}name = "Tom" age = 25 active = true常规:最基础的单层 JSON 对象,验证基本字段类型(字符串、数字、布尔)的转换正确性。
{"nested": {"key1": "value1", "key2": 42}}[nested] key1 = "value1" key2 = 42常规:嵌套对象,验证 TOML 的表(table)结构生成是否正确,缩进与层级关系。
{"items": [1, 2, 3]}items = [1, 2, 3]常规:数组类型,验证 TOML 数组字面量格式(方括号、逗号分隔)。
{}边界:空 JSON 对象,验证工具是否返回空字符串而非报错或输出无用内容。
{"key": null}# null 值无法转换为 TOML,已跳过边界:JSON 的 null 值在 TOML 中无对应类型,验证工具如何处理(跳过并给出注释说明)。
{"a": "line1\nline2"}a = """ line1 line2 """易错:含换行符的字符串,TOML 需用多行字符串(""")表示,验证转义处理是否正确。
{"key": "value with \"quotes\""}key = "value with \"quotes\""易错:字符串内包含双引号,验证转义字符(\")在 TOML 中是否被正确处理。
{"deeply": {"nested": {"object": true}}}[deeply.nested] object = true边界:深层嵌套(3 层以上),验证 TOML 的路径式表名([a.b.c])生成是否正确,避免层级丢失。

常见错误对照

1.JSON 末尾逗号直接粘贴报错

✗ 错误{"a": 1, "b": 2,}
✓ 修复{"a": 1, "b": 2}

JSON 规范(RFC 7159)禁止末尾逗号,但 JavaScript 对象字面量允许。直接粘贴 JS 对象会解析失败。

2.TOML 键名用了单引号

✗ 错误'key' = 'value'
✓ 修复key = "value"

TOML 规范要求键名是裸字或双引号字符串,单引号是字符串值专用,不能用于键。

3.JSON 布尔值写成了小写 true/false 以外的形式

✗ 错误{"flag": True}
✓ 修复{"flag": true}

JSON 布尔值必须全小写 true/false,Python 的 True/False 或 JS 的 !0 都不被 JSON 解析器接受。

4.TOML 多行字符串缩进被保留

✗ 错误str = """ hello world """
✓ 修复str = """ hello world """

TOML 多行字符串(""")会保留前导空白,除非使用反斜杠行尾续行。缩进空格会变成实际内容。

5.JSON 注释被当作有效内容

✗ 错误{"a": 1 /* 注释 */}
✓ 修复{"a": 1}

JSON 规范不允许注释,而 TOML 支持 # 注释。带注释的 JSON 会解析失败,需先移除注释再转换。

6.TOML 浮点数写成科学记数法但格式不符

✗ 错误pi = 3.14e+0
✓ 修复pi = 3.14e0

TOML 规范要求科学记数法指数部分不能有 + 号,只允许 e 后跟可选负号。e+0 会导致解析错误。

7.JSON 空值 null 被误写为 None 或 undefined

✗ 错误{"x": None}
✓ 修复{"x": null}

JSON 空值只有 null 一种表示,Python 的 None、JavaScript 的 undefined 都不被识别。

第三节

工作原理

How It Works

核心公式

TOML = { key = value } 其中 value 类型由 JSON 值类型决定:string → "string", number → number, boolean → true/false, null → 不输出, array → [[...]], object → {...}

变量说明

  • keyJSON 对象键,转为 TOML 键名
  • valueJSON 值,按类型映射为 TOML 字面量
  • stringJSON 字符串,TOML 中加双引号
  • numberJSON 数字,TOML 中直接输出
  • booleanJSON 布尔值,TOML 中为 true/false
  • nullJSON null,TOML 中省略该键
  • arrayJSON 数组,TOML 中为 [[]] 或内联
  • objectJSON 对象,TOML 中为嵌套表 {}

示例

输入 JSON:{"name":"Alice","age":30,"active":true,"tags":["dev","ops"],"meta":null}。转换后 TOML:name = "Alice"\nage = 30\nactive = true\ntags = ["dev", "ops"]\n(meta 键因 null 被省略)。

JSON 输入语法校验类型映射键排序TOML输出表头生成
用户输入 本地处理 输出结果
第五节

常见问题

Q & A
JSON 和 TOML 互相转的时候,数组里的空对象会不会丢?

不会丢。TOML 的 [[array]] 写法要求数组元素必须是同类型表格,但空对象 {} 会被转为空表格 {},在 TOML 里写成 [[array]] 下面直接跟空行。如果原 JSON 数组包含不同类型(如 [1, "a"]),TOML 不支持混用类型,转换会报错并提示第几行。建议先确认 JSON 数组元素类型一致再转。

我 JSON 里 key 是中文,转成 TOML 后还能正常用吗?

可以。TOML 的 key 支持纯 UTF-8 字符,中文 key 在 TOML 里直接写,不需要引号包围(除非包含空格或特殊符号)。但注意:有些 TOML 解析库老版本对非 ASCII key 有 bug,建议转完后用本工具的预览区检查 key 是否被自动加了引号,如果加了说明你的 key 包含空格或点号,不是编码问题。

为什么转出来的 TOML 里有些值被加了双引号,有些没加?

TOML 对值类型有严格区分。字符串必须加引号,数字、布尔值、日期不加引号。本工具自动识别 JSON 值的类型:JSON 中 "123" 是字符串,转 TOML 后带引号;123 是数字,不带引号。容易混淆的是 JSON 里 "true" 和 true:前者转成字符串 "true",后者转成布尔值 true(不加引号)。如果你发现预期是数字却加了引号,说明原 JSON 那个值被写成字符串了。

嵌套很深的 JSON 转成 TOML 后层级会不会乱?

TOML 用 [table] 和 [table.subtable] 表示嵌套,最多支持 3 级以内比较清晰。超过 3 级深嵌套会变成一长串 [a.b.c.d.e],可读性很差。本工具对超过 5 级的嵌套会自动在结果上方加一行注释提示“深度建议展平”。如果后续需要人工维护 TOML 文件,建议先把 JSON 按业务逻辑拆成几个独立表再转,否则后续改一个深层字段很难找。

转出来的 TOML 文件,在 Python 里用 tomllib 读报错说格式不对?

大概率是 TOML 里出现了 Python 不支持的浮点值。JSON 中的 NaN、Infinity 在 TOML 里没有对应写法,本工具遇到这类值会直接报错并提示“无法转换非有限浮点数”。解决办法:去原 JSON 里把 NaN 改成 null 或 0,再转。另外注意 TOML 文件必须用 UTF-8 无 BOM 编码保存,记事本另存为时选 UTF-8,不要选 UTF-8 with BOM。

这个工具是浏览器里直接转,还是会上传到服务器?

全程在浏览器本地运行,不上传任何数据。本工具用 JavaScript 在内存中解析 JSON 并生成 TOML 字符串,代码里没有网络请求。可以断网后打开页面验证:先打开工具页,再断开网络,粘贴 JSON 点转换,仍然能正常出结果。适合处理包含敏感信息的配置文件。

我 JSON 文件有 100MB,这个工具能转吗?

浏览器内存有限,100MB 的 JSON 文件大概率会卡死或提示“页面无响应”。实测 Chrome 稳定处理上限约 10-20MB(取决于机器内存)。建议:大文件先按逻辑拆成多个小文件分批转;或者用本工具的“粘贴部分”功能,只复制需要转换的段落。如果必须转完整大文件,推荐用命令行工具比如 yq 或 jq 配合 toml-cli。

转成 TOML 后,注释能不能保留?

不能。JSON 标准本身不支持注释,所以 JSON 文件里没有注释可保留。如果你原来的 JSON 文件里用 "//" 或 "/* */" 写了注释,这些注释在 JSON 解析时会被视为非法字符,工具会直接报错。建议:转换前先用工具把 JSON 里的注释删掉(很多代码编辑器的“删除注释”插件可以一键处理),或者把注释内容写在 JSON 的某个字段值里再转。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭