TOML ↔ JSON 互转
格式化所有处理都在浏览器本地完成,数据不上传服务器
把一份 TOML(Cargo.toml、pyproject.toml、各种 `*.toml` 配置)转成 JSON,或反过来。用的是完整的 TOML 1.0 实现,所以四种日期时间、多行字符串、点号键、表数组 `[[x]]`、十六进制与带下划线的数字都能正确处理 —— 自己写一个「key = value 加几个小节」的子集,必然会在某个输入上静默解析成另一个意思。 三处会静默改掉数据的地方都做了处理: · 本地日期与本地时间不做时区换算。 TOML 的 `1979-05-27` 是「这一天」,不是「这一天的零点 UTC」;`07:32:00` 也没有时区。当成时刻去转,东八区的用户会看到日期整体差一天。 · 大整数不丢位数。 超过 2^53 的整数以字符串输出(`9223372036854775807` 转成 Number 会变成 `...5808`),类型变了但一个字符不差。 · `inf` / `-inf` / `nan` 不会变成 null。 JSON 没有这三个值,而 `JSON.stringify(Infinity)` 的结果是 `null` —— 不报错,只是 `inf = inf` 静默成了 `{"inf": null}`。这里转成字符串,值看得见。 反方向(JSON → TOML)有个绕不开的问题:TOML 没有 null 类型,而默认行为是把那个键整个丢掉。所以这里默认直接报错并指出是哪一个键,选项里可以改成写空字符串或跳过。
功能
- 两个方向:TOML → JSON、JSON → TOML,方向可自动判断也可手动指定
- 四种日期时间都按规范处理:本地日期、本地时间不做时区换算(否则会整体差一天)
- 表数组 [[x]] 与对象的数组互转,点号键展开成嵌套对象,需要引号的键会自动引起来
- 大整数按 BigInt 处理:超过 2^53 的以字符串输出,位数一个不丢
- inf / -inf / nan 转成字符串,不会像 JSON.stringify 那样静默变成 null
- JSON → TOML 时遇到 null 会报错并指出路径(TOML 没有 null 类型,默认会丢键)
- null 也可以选择写成空字符串或跳过键;数组里的 null 不允许跳过(会让后面下标全变)
- 解析错误指到具体的行与列,而不是一句「格式不对」
- 顶层不是对象时说清楚「TOML 的顶层永远是一张表」,而不是抛一句英文
- 输出带语法着色,JSON 缩进支持 2 / 4 空格与制表符
使用方法
- 把 TOML 或 JSON 粘进输入框 —— 能解析成 JSON 的按 JSON 处理,其余按 TOML
- 结果实时出现,方向也可以手动指定
- JSON 转 TOML 时如果报了 null,选一种处理方式再继续
- 点复制取走结果
常见问题
- 为什么我的 JSON 里有个 null,它却报错了?
- 因为 TOML 根本没有 null 类型。把 null 转过去有三种下场,没有一种是「无损」的:整个键消失(这是库的默认行为,最危险 —— 你会拿到一份少了一个字段的配置)、写成空字符串(键保住了,类型从 null 变成了字符串)、或者跳过这个键。这里默认选报错并指出是哪一个键,因为另外两种都会让你拿到一份看着正常、其实变了样的配置,而你不会有任何提示。知道是哪一个键之后,从上面选一种即可继续。
- 为什么大整数变成了字符串?inf 和 nan 也是?
- 因为 JSON 表达不了它们。超过 2^53 的整数在 JavaScript 里无法精确表示 —— `9223372036854775807` 会变成 `...5808`,尾数悄悄丢了。而 `inf` / `-inf` / `nan` 更是连表示都没有:`JSON.stringify(Infinity)` 的结果是 null,不报错。与其输出一个看起来正常、其实已经错了的值,不如输出成字符串 —— 类型变了,但值一个字符不差,而且你在结果里看得见这个变化。
- 本地日期为什么不带时区?
- 因为它在 TOML 里本来就没有时区。`birthday = 1979-05-27` 表示的是这一天,`alarm = 07:32:00` 表示的是这个时刻,都不指某个具体的时间点。如果转换时把它当成「1979-05-27 00:00 UTC」再按你的时区渲染,东八区会显示成 5 月 26 日 —— 日期整体差一天。所以这里原样输出 `1979-05-27`,不加 `Z`。带时区的那两种(`1979-05-27T07:32:00Z` 与 `...-07:00`)则会保留偏移量。
- 为什么注释不见了?
- JSON 里没有可以承载注释的结构 —— 它只有对象、数组和标量。转成 JSON 时注释只能丢弃。反方向(JSON → TOML)本来就没有注释可保留。如果注释很重要,建议保留一份原始 TOML,不要把它当作「转换的中间产物」。
相关工具
YAML 转换
格式化YAML 与 JSON 双向互转:多文档、锚点别名与合并键都按规范处理,大整数不丢精度,解析错误指出行列位置。全部在浏览器本地完成。
CSV 转换
格式化CSV / TSV 与 JSON 双向互转:自动识别分隔符,正确处理引号与字段内的换行,剥掉 Excel 的 BOM,数字只在无损时才转换。全部在浏览器本地完成。
JSON 格式化
格式化在线 JSON 格式化与校验工具:树形折叠浏览、搜索键值、逐节点改值与删除、语法错误定位到具体行列,输入框带行号与高亮。全部在浏览器本地完成。
JSON 转代码
格式化把 JSON 样本转成 TypeScript interface、Go struct、Java class 或 Rust struct:不齐的键标成可选、类型冲突退化为联合类型。全程在浏览器本地生成。
SQL 格式化
格式化在线 SQL 格式化:关键字统一大小写、按 SELECT / FROM / WHERE 等子句换行缩进、子查询逐层展开,压缩模式去掉多余空白与注释。语句不上传服务器。
JSON5 转换
格式化把 JSON5 解析成标准 JSON:注释、无引号键、单引号、尾逗号、十六进制、Infinity 都支持,错误指出行列。全部在浏览器本地完成。