JSON 转 TOML

免费在线JSON转TOML转换器,自动将JSON对象转为TOML v1.0规范配置,支持嵌套表([section])、子表([a.b])和表数组([[items]]),可直接生成Cargo.toml/pyproject.toml,所有处理本地完成。

相关推荐

什么是 TOML?为什么要把 JSON 转成 TOML?

TOML 全称 Tom's Obvious, Minimal Language(汤姆的明显最小化语言),是由 GitHub 联合创始人 Tom Preston-Werner 在 2013 年发布的配置文件格式。它的设计目标是:语法明显(obvious)、最小化(minimal)、易于人类阅读、明确无歧义。TOML 1.0 在 2021 年成为稳定版本(toml-lang/toml),目前已成为 Rust 生态 Cargo、Python PEP 621(pyproject.toml)、Hugo、Prettier、Deno、Taplo 等众多工具的默认配置格式。

TOML 在配置文件场景相比 JSON 和 YAML 有几个明确优势:①没有 YAML 的缩进陷阱——YAML 用缩进表示层级,缩进错误会导致配置含义完全改变(比如 list 变成 string),TOML 用 [table] 显式声明层级,不存在歧义;②比 JSON 更适合配置——JSON 的引号、大括号在复杂配置中非常啰嗦,TOML 的 key = value 写法更清爽,注释原生支持;③类型系统明确——TOML 区分 integer/float/string/boolean/datetime/array/table 七种类型,没有 JSON 那种"数字到底是整数还是浮点"的歧义,也没有 YAML 1.1 的 Norway 问题(NO 解析为布尔 false)。

TOML 的核心结构由四种元素组成:①键值对(key = value)表示基础配置项;②表(Table)用 [name] 表示命名分组,支持嵌套([a.b.c]);③表数组(Array of Tables)用 [[name]] 表示同构对象的列表,常用于多环境配置、插件列表、依赖项列表;④数组(Array)支持基础类型内联([1, 2, 3])和多行两种写法。本工具在转换时会智能识别 JSON 结构,自动选用最合适的 TOML 语法。

JSON 转 TOML 的常见动机有几种:①项目从 Node.js 生态迁移到 Rust/Python 新生态,配置格式需要统一为 TOML;②团队决定把散落的 JSON 配置统一管理到 TOML,利用 TOML 的 [section] 层级避免 JSON 深层嵌套的阅读负担;③用 TOML 替换 YAML 消除缩进导致的诡异 bug;④在 CI/CD 中把上游下发的 JSON 元数据转成 TOML 注入到下游工具。本工具覆盖了所有这些场景的转换需求。

转换过程本质上是语法树映射:JSON.parse() 把文本解析为 JavaScript 对象(AST),再递归遍历每个节点——字符串、数字、布尔、null 映射为对应的 TOML 标量;数组根据元素类型分为内联数组或表数组;嵌套对象映射为表或子表。最终按 TOML 规范输出文本。这种结构化映射保证了转换结果在语法上 100% 合法,不会出现格式错误。

适用场景

  • 后端接口返回配置迁移:把服务端 API 下发的 JSON 配置粘贴进来转成 TOML,供 Rust 微服务启动时读取。
  • 运维批量下发环境配置:把数据库连接对象数组的 JSON 转成 [[connections]] 表数组,写入不同环境的 config.toml。
  • 前端把 mock JSON 转 TOML:调试静态站点时将手写的 Mock 数据转成 Hugo 的 config.toml 站点配置。
  • 测试工程师准备夹具:将单测中用的 JSON 期望数据转成 TOML 配置,喂给以 TOML 为输入的被测程序。
  • 数据分析师导出参数表:把分析脚本的 JSON 参数集合转成 pyproject.toml 中 [tool] 段的配置片段。
  • 含敏感串的配置本地转换:数据库密码、API 密钥写在 JSON 里,用纯前端转换避免上传泄露后再粘进 TOML。
  • Windows 路径转义排查:JSON 里含 C:\Users 反斜杠路径,转 TOML 时自动转义为 \\ 避免解析报错。
  • 字符串含双引号导致解析失败:接口返回的 JSON 值里嵌了双引号,转 TOML 后自动转义确保 TOML 解析器能读。
  • 深层嵌套对象转表头:多层嵌套的 server.ssl 配置 JSON 一键转成 [server.ssl] 层级表头,替代冗长的 JSON 括号。
  • null 字段处理确认:JSON 配置里有 null 值,转 TOML 时统一变为空字符串,转换后按需手动补 optional 字段。
  • 语法错误先修再转:粘贴的 JSON 有尾逗号报红,跳转 JSON 修复工具补全后再回来转 TOML。
  • 转前先格式化校验:先用 JSON 格式化工具压缩或美化并校验源数据,确认无误后再转成 TOML 配置。
  • 同结构再转 YAML 对比:把同一份 JSON 分别转成 TOML 和 YAML,评审团队该用哪种配置格式落地。
  • 上传旧配置文件迁移:直接上传项目里遗留的 .json 配置文件,读取后转成 TOML 下载为 config.toml 替换。
  • 历史版本回溯对比:借助本地保存的最近 200 条转换历史,找回上一版 JSON 配置重新生成 TOML 核对差异。

使用方法

  1. 粘贴 JSON 内容到左侧编辑器,或点击上传按钮选择 .json / .txt 文件,也可以点击「示例」加载完整嵌套示例
  2. 工具实时解析 JSON 并按 TOML v1.0 规范生成右侧配置代码,键值对、嵌套表、表数组自动用对应语法
  3. 如 JSON 有语法错误会显示红色错误提示,可点击跳转到 JSON 修复工具自动补全尾逗号等常见错误
  4. 结果满意后点击「复制」按钮复制 TOML 内容,或点击「下载」保存为 config.toml 文件供项目使用

功能特点

  • 标准TOML v1.0规范输出:生成的配置文件可直接用于Cargo、Poetry、Hugo、Prettier等任何支持TOML的工具
  • 嵌套对象自动映射:多层嵌套JSON自动转为TOML表([a])与子表([a.b.c]),层级清晰可读
  • 表数组智能识别:对象数组(如数据库连接列表)自动转为TOML表数组([[items]]),符合官方规范
  • 字符串安全转义:双引号、反斜杠、换行、制表符等特殊字符自动按TOML规则转义,避免非法字符导致解析失败
  • 类型自动映射:JSON的字符串/数字/布尔/null自动对应TOML的string/integer/float/boolean,null转为空字符串
  • 实时双向编辑:左侧粘贴JSON右侧即时查看TOML结果,输入即转换不用手动点按钮
  • 示例数据快速体验:一键加载嵌套对象+数组+表数组的完整示例,直观看到TOML生成效果
  • 文件上传与下载:支持上传.json/.txt文件读取内容,转换后一键下载为config.toml文件
  • 可拖动面板与历史:PC端左右面板可拖动调整宽度,自动保存最近200条历史便于回溯
  • 跳转JSON格式化:转换后一键跳转到JSON格式化工具继续美化、校验或压缩JSON源数据
  • 纯前端本地处理:所有解析与转换在浏览器JavaScript完成,含敏感密钥、连接串的配置数据不上传

常见问题

怎么把 JSON 转成 TOML 配置文件?

将 JSON 内容粘贴到左侧输入框,工具会自动解析 JSON 对象并按 TOML v1.0 规范转换为配置文件格式。键值对变成 key = value,嵌套对象变成 TOML 表([section])与子表([a.b]),数组按内容自动分为内联数组或表数组([[items]])。点击示例按钮可加载嵌套示例查看效果,转换结果可直接下载为 config.toml 文件用于项目配置。

TOML 和 YAML、JSON 各自适合什么场景?

JSON 适合 API 数据交换和前后端数据传输,是 REST 接口的事实标准;YAML 适合复杂数据结构和 CI/CD 配置(GitHub Actions、Ansible、Kubernetes),可读性高支持注释和多文档;TOML 适合明确的配置文件场景(Rust/Cargo、Python pyproject、Hugo、Prettier),语法简洁、歧义少、无缩进陷阱。三者没有绝对的优劣,关键是匹配场景——配置文件推荐 TOML,CI/CD 配置推荐 YAML,API 数据用 JSON。

嵌套的 JSON 对象在 TOML 中怎么表示?

TOML 用表(Table)来表示嵌套结构。一层嵌套如 {"database": {"host": "localhost"}} 转为 [database] host = "localhost";多层嵌套如 {"server": {"ssl": {"enabled": true}}} 转为 [server.ssl] enabled = true。本工具会自动识别嵌套层级并生成对应的表头路径,不需要手动调整。

JSON 数组在 TOML 中怎么转换?

TOML 区分两种数组语法:①基础类型数组(如 ["a", "b", 1, 2])转为内联数组 key = ["a", "b", 1, 2],用方括号包裹逗号分隔;②对象数组(如 [{"name": "primary"}, {"name": "replica"}])转为表数组 [[items]],每个对象前加 [[items]] 表头,字段平铺在下方。本工具会自动判断数组类型选用最合适的 TOML 语法。

生成的 TOML 可以直接用于 Cargo.toml 吗?

可以。工具严格遵循 TOML v1.0 官方规范(github.com/toml-lang/toml),输出的 TOML 可以直接用于 Cargo(Rust 包管理)、Poetry/pyproject(Python 包管理)、Hugo(静态站点)、Prettier、Deno、Taplo 等任何支持 TOML 格式的工具。注意:如果你需要 Cargo.toml 的特定 [package] / [dependencies] 段,请按 Cargo 规范补充相应字段(name、version、edition、crate 依赖表等)。

JSON 中的 null 值会转成什么?

TOML 没有 null 类型,因此 JSON 的 null 会被转换为一个空字符串 ""(最常见的等价表达)。如果你的 TOML 消费者对 null 字段有特殊要求(比如 [dependencies] 里某个 crate 的 optional 字段),转换后请手动调整对应行。

字符串里的双引号和换行怎么处理?

TOML 字符串必须用双引号包裹,内部的双引号、反斜杠、换行符(\n)、回车符(\r)、制表符(\t)都需要按 TOML 规则转义。本工具会自动处理这些转义,例如 JSON 中的 He said "Hello" 转为 TOML 后变成 He said \"Hello\",多行字符串中的换行会变为 \n。无需手动转义,工具输出可以直接被 TOML 解析器正确读取。

生成的 TOML 有没有日期时间类型支持?

本工具输入仅支持 JSON 文本,而 JSON 标准没有原生日期时间类型(常见做法是 ISO 8601 字符串,如 "2026-01-01T00:00:00Z")。转换后的 TOML 会把这些值按字符串保留(key = "2026-01-01T00:00:00Z")。如果你需要 TOML 原生的 local datetime/offset datetime 类型,请手动把字符串改为裸的 TOML 日期字面量(如 2026-01-01T00:00:00)。

本地浏览器转换,配置数据会上传吗?

不会。所有 JSON 解析、TOML 生成、字符串转义全部在你的浏览器本地 JavaScript 引擎中完成,不会通过网络发送到任何服务器,断网也能正常使用。包含数据库密码、API 密钥、内网地址等敏感配置信息的 JSON 可以放心转换。

故障排查

JSON 报错"Unexpected token"怎么解决?

这是 JSON 语法错误。常见原因:①末尾多余的逗号(trailing comma),如 {"a":1,};②用单引号包裹字符串,如 {'a':1}(JSON 必须双引号);③键名没有双引号,如 {a:1};④注释 // 或 /* */(JSON 标准不支持)。可以用本站的 JSON 修复工具一键自动修复这些常见错误,修复后再粘贴到本工具转换。

转换后的 TOML 在 Cargo 中报错"invalid TOML"?

通常是字段命名冲突或缺少必填字段。TOML 解析器对表头路径、键名重复、字符转义非常严格。请检查:①同一作用域内是否有重复键名;②字符串内的特殊字符是否正确转义(双引号、反斜杠、换行);③嵌套层级是否过深(TOML 1.0 建议不超过 5 层);④是否缺少 [package] 等 Cargo 必填段。本工具输出的语法 100% 合法,问题一般在使用方(如字段名是否符合 Cargo 规范)。

对象数组转换成了内联数组而不是表数组?

JSON 数组只有元素全是基础类型(字符串/数字/布尔/null)时才会转为内联数组 ["a","b"],对象数组(如 [{"name":"x"}])会转为表数组 [[items]]。如果你的对象数组被错误地识别为内联数组,说明数组里混入了非对象元素。请检查数据:①是否数组中混入了字符串或数字;②是否嵌套层级被破坏了。

某些键名转换后带了引号,怎么去掉?

TOML 规定键名只能包含字母、数字、下划线和短横线([A-Za-z0-9_-])。如果 JSON 键名包含特殊字符(如空格、点、中文、emoji、保留字),工具会自动用双引号包裹以保证 TOML 合法,例如 {"my key": 1} 会转为 "my key" = 1。如果你的下游工具不接受带引号的键名,请手动把 JSON 键名改为合法字符(A-Z a-z 0-9 _ -)后再转换。

大文件转换浏览器卡顿怎么办?

工具做了实时转换优化(输入即转换),但超大文件(>1MB、几十万行)仍可能有压力。建议:①先用 JSON 格式化工具检查 JSON 是否合法;②分批转换(如按顶级键拆分);③确认浏览器有足够内存;④超大配置文件(10MB+)建议用命令行工具如 taplo、tomlq 处理,本工具定位为日常配置场景(KB 到几百 KB 级别)。

术语表

TOML
Tom's Obvious, Minimal Language,一种为配置文件设计的格式语言,语法简洁无歧义,是 Rust Cargo / Python pyproject / Hugo 的默认配置格式。
Table(表)
TOML 中用 [name] 声明的命名分组,相当于 JSON 中的对象,支持点号嵌套如 [server.ssl]。
Array of Tables(表数组)
TOML 中用 [[name]] 声明的同构对象列表,每个 [[name]] 段包含一个对象的全部字段,相当于 JSON 的对象数组。
Inline Table(内联表)
TOML 1.0 支持的语法,用 { key = value, key = value } 在单行内声明简单对象,适合不需要命名的扁平对象。
Cargo.toml
Rust 项目的标准配置文件,定义 package 元数据、dependencies、dev-dependencies、features 等,TOML 格式。
pyproject.toml
Python 项目的标准配置文件(PEP 621),定义 build-system、project 元数据、dependencies、tool 配置(black/pytest/mypy 等)。
TOML v1.0
TOML 1.0 是 2021 年正式发布的稳定版本,本工具严格遵循此规范(github.com/toml-lang/toml/blob/main/toml.md)。
JSON 嵌套对象
JSON 中包含其他对象的对象,对应 TOML 的 Table([section])或子表([a.b.c])。
TOML 转义
TOML 字符串内双引号、反斜杠、换行等特殊字符必须用反斜杠转义(\"、\\、\n),本工具自动处理。
配置文件(Config File)
应用程序启动时读取的设置文件,与代码分离便于修改。TOML 是配置文件的事实标准之一。

JSON 类型与 TOML 类型映射表

本工具按以下规则将 JSON 类型转换为 TOML 类型:

JSON 类型TOML 类型TOML 写法说明
stringstringkey = "value"TOML 字符串必须双引号包裹
integerintegerkey = 8080整数无小数点
floatfloatkey = 3.14浮点必须有小数点
booleanbooleankey = trueTOML 仅小写 true / false
nullstring(空)key = ""TOML 无 null 类型,转换为空字符串
array[primitive]arraykey = ["a", "b"]基础类型数组用内联方括号
array[object]array of tables[[items]]\nkey = value对象数组用 [[name]] 表数组
objecttable[name]\nkey = value对象用 [name] 表声明

TOML 字符串转义对照表

TOML 字符串内必须转义的特殊字符:

原始字符TOML 转义后名称示例场景
"\"双引号字符串内嵌套双引号
\\\反斜杠Windows 路径 C:\Users
换行\nNewline多行字符串压缩
制表符\tTab制表符字段
回车\rCarriage ReturnWindows 换行 CRLF
\b\bBackspace退格符
\f\fForm Feed换页符
U+0000\u0000Unicode 0控制字符必须用 \u 转义

JSON 转 TOML 示例对照

复杂结构的 JSON 输入对应的 TOML 输出:

结构示例
JSON 输入{ "name": "app", "port": 8080 }
TOML 输出name = "app" port = 8080
JSON 输入{ "server": { "host": "0.0.0.0", "port": 443 } }
TOML 输出[server] host = "0.0.0.0" port = 443
JSON 输入{ "hosts": [{"ip":"10.0.0.1"},{"ip":"10.0.0.2"}] }
TOML 输出[[hosts]] ip = "10.0.0.1" [[hosts]] ip = "10.0.0.2"

Privacy & Security

本工具所有 JSON 解析、TOML 生成、字符串转义、文件读取全部在浏览器本地 JavaScript 中执行,你的 JSON 内容和生成的 TOML 配置不会通过网络发送到任何服务器,也不会被记录或分析。包含数据库密码、API 密钥、内网地址等敏感配置信息的 JSON 可以放心转换。本地历史仅保存在你自己浏览器的 localStorage 中,关闭浏览器或清空缓存即可删除。

Authoritative References