TOML 转 JSON 转换器

将 TOML 粘贴到左侧,得到 JSON。表变成对象,表数组变成数组。在浏览器中运行 — 无需上传。

  1. 将 TOML 粘贴到左侧文本区。
  2. 点击「转换为 JSON」。输出是保留表嵌套结构的 JSON 对象。
  3. 复制结果或下载为 data.json。
  4. 日期时间会被转为 ISO 8601 字符串;数字中的下划线会被去除。
它能做什么?

将 TOML 1.0 文档解析为 JSON 对象。`[section]` 表变成嵌套对象;`[[items]]` 表数组变成 JSON 数组。字符串、整数(包括 16/8/2 进制字面量与位分隔下划线)、浮点、布尔、日期、日期时间和时间都映射到 JSON 等价表示。内联表与内联数组的处理方式相同。

示例

TOML 输入:

name = "Ada"
active = true

[address]
city = "London"

JSON 输出:

{
  "name": "Ada",
  "active": true,
  "address": {
    "city": "London"
  }
}

常见 TOML 错误及修复

TOML 在某些规则上比 YAML 或 JSON 更严格。下列模式覆盖了大多数解析失败。

  • 未加引号的字符串。 `name = Ada` 无效 — 裸值会被理解为键/布尔/数字,而不是字符串。请用双引号: `name = "Ada"`。
  • 混合类型数组(TOML 0.x)。 TOML 0.5 禁止数组中混合类型;TOML 1.0 允许。@iarna/toml 遵循 1.0,所以 `[1, "two"]` 在这里有效。如果 TOML 必须经过 0.5 工具往返,请保持数组类型一致。
  • 重复定义表。 把 `[a]` 定义两次会出错。同一个表头最多只能出现一次。请把键合并到单个 `[a]` 块。
  • 缺少时区的日期时间。 `d = 2026-04-26T12:00:00`(没有 Z 或偏移)是「本地日期时间」 — 能解析,但 JSON 没有地域概念。输出是同一字符串(墙上时钟时间),不是 UTC 时刻。要 UTC 请加 `Z`: `d = 2026-04-26T12:00:00Z`。
  • 三重引号转义混淆。 TOML 基本多行字符串使用 `"""..."""` 并处理转义;字面多行字符串使用 `\'\'\'...\'\'\'` 不处理。混用转义规则是最常见的多行字符串错误。
  • 扩展内联表。 内联表 `point = {x=1, y=2}` 是封闭、自包含的 — 之后不能再写 `[point.z]` 或 `point.z = 3`。如需扩展,请改用标准 `[point]` 块语法。
常见问题

日期时间在 JSON 里如何表示?

JSON 没有原生日期时间类型,所以会变为 ISO 8601 字符串。带偏移的(`2026-04-26T12:00:00Z`)与本地的(`2026-04-26T12:00:00`)都按字面字符串化 — 但只有带偏移的形式在 JSON 中无歧义。

整数中的下划线会保留吗?

不会 — TOML 用 `1_000_000` 提升可读性,解析器会去掉下划线,JSON 值是 `1000000`。位分隔仅是 TOML 源文本特性。

TOML 注释会怎样?

会被丢弃。TOML 注释以 `#` 开头,但 JSON 没有注释语法,解析器会丢弃它们。如需保留,请使用其他中间格式。

支持表数组吗?

支持。重复出现的 `[[products]]` 会变为 `products` 键下的 JSON 数组。每个 `[[products]]` 头开启新条目,其后的键值对填充该条目。

能转换非常大的 TOML 文件吗?

约 30 MB 后文本框会变慢。极大的 TOML 文件很少见 — 多数配置文件远小于 1 MB。

我的 TOML 会被上传吗?

不会。一切都在你的浏览器里运行 — 数据由本页 JavaScript 解析,从不发送到任何服务器。