跳到主要内容

配置管理:JSON To TOML — Numio

把 JSON 对象转换为 TOML。嵌套对象变为 [table] 段,对象数组变为 [[array of tables]],值为 null 的键会被删除,因为 TOML 没有 null。

把 JSON 配置改写为 pyproject.toml、Cargo.toml、wrangler.toml 或 Hugo 配置语法。

JSON

适用场景

  • 把 JSON 配置改写为 pyproject.toml、Cargo.toml、wrangler.toml 或 Hugo 配置语法。
  • 把脚本以 JSON 生成的设置迁移到基于 TOML 的配置文件。

使用方法

  1. 将 JSON 对象(根节点必须是对象,不能是数组)粘贴到左侧编辑器,或用加载文件按钮打开 UTF-8 文件。
  2. 检查右侧的 TOML:先是标量键,然后是 [table] 和 [[array]] 段。
  3. 复制结果,替换配置之前先对照目标工具文档中的键。

JSON 对象

{
  "title": "My App",
  "port": 8080,
  "debug": false,
  "owner": { "name": "Ada", "since": "2024-01-05T10:00:00Z" },
  "servers": [
    { "host": "a.example.com", "weight": 3 },
    { "host": "b.example.com", "weight": 1 }
  ],
  "ports": [80, 443]
}

TOML

title = "My App"
port = 8_080
debug = false
ports = [ 80, 443 ]

[owner]
name = "Ada"
since = "2024-01-05T10:00:00Z"

[[servers]]
host = "a.example.com"
weight = 3

[[servers]]
host = "b.example.com"
weight = 1

功能与限制

大于等于 1000 的整数会加上下划线分隔符(8080 变为 8_080)。这是合法的 TOML,解析后是同一个数字。

日期字符串仍是带引号的字符串;JSON 没有日期类型,因此不会生成 TOML 日期时间值。

值为 null 的键会被静默省略,JSON 中的 1.0 会写成整数 1。

使用 @iarna/toml 在浏览器中运行。对象与其他值混合的列表会被拒绝,因为 TOML 的表数组无法容纳它们。子表缩进两个空格,TOML 会忽略这种缩进。

FAQ

根节点可以是 JSON 数组吗?

不可以。TOML 文档必须是表,因此页面会提示 JSON 是数组,并建议用对象包起来,例如 {"items": [...]}。

null 值会怎样处理?

该键会被删除。{"a": null} 输出为空。如果目标需要该键,请改用空字符串,或明确地删除它。

为什么数字中有下划线?

序列化器会用 _ 数字分隔符格式化大整数,TOML 规范允许这种写法。任何 TOML 解析器都会把 8_080 读作 8080。

规范与参考资料