JSON 转 TOML 转换器

将 JSON 对象粘贴到左侧,得到 TOML。通过 @iarna/toml 严格遵循规范。在浏览器中运行 — 无需上传。

  1. 将 JSON 对象粘贴到左侧文本区。
  2. 点击「转换为 TOML」。顶层必须是 JSON 对象 — 不能是数组。
  3. 复制或下载 TOML 输出。
  4. 需要记录列表时,先用 `{ 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),并可能规范化键顺序。