JSON 转 TOML 转换器
将 JSON 对象粘贴到左侧,得到 TOML。通过 @iarna/toml 严格遵循规范。在浏览器中运行 — 无需上传。
- 将 JSON 对象粘贴到左侧文本区。
- 点击「转换为 TOML」。顶层必须是 JSON 对象 — 不能是数组。
- 复制或下载 TOML 输出。
- 需要记录列表时,先用 `{ items: [...] }` 包裹,会被转为 TOML 表数组。
它能做什么?
通过 @iarna/toml 将 JSON 对象转换为符合 TOML 1.0 的文档。嵌套对象变为 `[section]` 头部;对象数组变为 `[[items]]` 表数组块;字符串、数字、布尔与 ISO 8601 日期时间字符串映射到 TOML 原生值。输出按规范顺序排序 — 普通键出现在子表之前,以兼容严格的 TOML 解析器。
示例
JSON 输入:
{
"name": "Ada",
"active": true,
"address": {
"city": "London"
}
} TOML 输出:
name = "Ada"
active = true
[address]
city = "London" 常见 JSON → TOML 陷阱
TOML 在顶层规则上比 JSON 严格。下列模式解释了「看起来该可以但失败」的 JSON 值的常见原因。
- 顶层是数组。 TOML 不能表示顶层 JSON 数组。请用对象包裹: `{"items": [...]}`。结果会变成 `[[items]]` 表数组。
- 顶层是单一标量。 裸的 `42` 或 `"hello"` 在 TOML 中没有可附着的键。请用对象包裹: `{"value": 42}`。
- null 值。 TOML 没有 null 类型。值为 null 的 JSON 键会在序列化时被整体省略。要表达「明确为空」请使用空字符串 `""` 或预先约定的哨兵值。
- 混合类型数组。 TOML 1.0 允许 `[1, "two"]`,但旧的 0.5 解析器不允许。如果 TOML 必须经过 0.5 工具,请在转换前保持 JSON 数组类型一致。
- TOML 输出中键含点号。 `"my.key"` 这样的 JSON 键会变成 TOML 「点号键」路径,被解析为嵌套。序列化器会加引号: `"my.key" = ...` — 但有些消费者仍可能将其视为路径。
- NaN / Infinity。 TOML 1.0 支持 `nan`、`inf`、`-inf` 字面量。JSON 不能表示这些值 — 它们通常以字符串 `"NaN"`、`"Infinity"` 等形式到达。如果需要真正的 TOML 浮点特殊值,请手动转换。
常见问题
日期如何表示?
JSON 中的日期是 ISO 8601 字符串(如 `"2026-04-26T12:00:00Z"`)。序列化器把它们当作字符串保留在 TOML 中,而不是 TOML 原生的日期时间类型。如果需要原生 TOML 日期时间,请在 JavaScript 端用合适的类型标记预处理。
深层嵌套的对象会被扁平化吗?
不会 — 它们会变成嵌套的 `[a.b.c]` 头部。每层嵌套对应点号连接的头部路径。非常深的结构可能产生很长的头行;那只是 TOML 表达深度的方式。
键的顺序会保留吗?
基本上是。序列化器会按 TOML 规则,让原始值出现在子表之前;而在同一层级内,JSON 的插入顺序会被保留。
如何在输出中获得 TOML 内联表?
不能 — 序列化器始终使用 `[section]` 块头部,不会输出内联表。需要内联请对结果做后处理。内联表只是 TOML 的可读性特性,不是不同的数据形态。
我的 JSON 会被上传吗?
不会。一切都在你的浏览器里运行 — 输入由本页 JavaScript 解析与序列化,从不发送到任何服务器。
可以 JSON → TOML → JSON 来回转换吗?
对于受支持的类型(字符串、数字、布尔、嵌套对象、对象数组)可以。往返会丢失 null 值(TOML 没有 null),并可能规范化键顺序。