JSON 转 TOML 转换器
在浏览器中粘贴 JSON,即刻得到 TOML。安全处理 null、检查顶层表,输出适配 Cargo.toml 与 pyproject.toml,100% 本地运行,无需上传,隐私安全。
选项 · 2 个空格
什么是 TOML,为什么要从 JSON 转换?
TOML(Tom's Obvious, Minimal Language,汤姆的显而易见的极简语言)是一种配置文件格式,构建目标是无歧义、便于人类阅读与编辑。它是 Rust 生态(Cargo.toml)、现代 Python 打包(pyproject.toml)以及 Hugo、Netlify、Poetry、Foundry 等工具的标准配置格式。JSON 则是工具和 API 产出的通用机器格式。当你手上有作为 JSON 的结构化数据、但需要一份人可编辑的 TOML 配置作为目标时 — 生成 Cargo.toml 或 pyproject.toml,或把应用的 JSON 设置变成可读的配置文件 — 把 JSON 转换为 TOML 就很常见。
TOML 比 JSON 更有结构,而本工具把这种严格性变成指引,而非晦涩的失败:
**1. 顶层表强制。** 每个 TOML 文档的根都是一个表 — 裸数组或标量都不是有效的 TOML。本工具不会为 { 顶层数组 } 的输入产出损坏的输出,而是检测到它并准确告诉你如何把数据包在一个键下,因此你总能得到有效的 TOML 或清晰的解释。
**2. 安全、透明的 null 处理。** JSON 有 null,TOML 没有。大多数转换器要么崩溃,要么悄悄丢弃数据。本工具很明确:值为 null 的对象键会被丢弃,被移除的键会列在一条警告里;而数组内部的 null — 没有有效的 TOML 表示 — 会产生一个精确的、指向路径的错误。你绝不会因缺失数据而措手不及。
**3. 惯用的 TOML 输出。** 嵌套对象变成 [表],深度嵌套对象变成点分表([tool.ruff]),对象数组变成表数组([[section]])— 正是真实的 Cargo.toml 和 pyproject.toml 文件所用的形态。转换由零依赖、符合 TOML 1.0.0 的 smol-toml 库驱动。
**4. 100% 基于浏览器的隐私。** 你的 JSON — 可能包含凭据、令牌或内部服务细节 — 绝不会离开你的浏览器。无上传、无服务器、无日志。在浏览器的「网络」标签中即可确认。
需要反向转换?请使用 TOML 转 JSON 转换器。在处理其他配置格式?试试 JSON 转 YAML 转换器 和 YAML 转 JSON 转换器,或先用 JSON 格式化工具 清理你的 JSON 输入。每种格式都有其定位:JSON 用于机器交换,TOML 用于人工编辑的应用与工具配置,YAML 用于深度嵌套的基础设施清单。本转换器让你无需编写任何代码即可从 JSON 转到 TOML。
// Convert JSON to TOML in Node.js using the smol-toml library
import { stringify } from 'smol-toml';
const data = JSON.parse(`{
"package": { "name": "my-app", "version": "1.0.0" },
"dependencies": { "serde": { "version": "1.0" } }
}`);
// The top-level value must be an object; null values on objects are dropped.
const toml = stringify(data);
console.log(toml);
// [package]
// name = "my-app"
// version = "1.0.0"
//
// [dependencies.serde]
// version = "1.0" 核心功能
实时转换
当你输入或粘贴 JSON 时,TOML 输出会即刻更新 — 无需「转换」按钮。大型输入(>200KB)会自动切换到手动模式,以保持浏览器响应流畅。
顶层表指引
TOML 文档的根必须是一个表。如果你的 JSON 顶层是数组或标量,工具会准确告诉你如何把它包在一个键下 — 没有损坏的输出,无需猜测。
安全的 null 处理
TOML 没有 null。值为 null 的对象键会被丢弃并列在一条警告里;数组内部的 null 会引发一个精确的、指向路径的错误。你始终清楚你的数据发生了什么。
惯用的 TOML 输出
嵌套对象变成 [表],深度嵌套对象变成点分表([tool.ruff]),对象数组变成表数组([[section]])— 正是真实的 Cargo.toml 和 pyproject.toml 所用的形态。
浮点数与整数感知
TOML 区分整数与浮点数,因此像 1.0 这样的浮点数会被写作整数 1。当这种强制转换改变数值类型时,工具会提醒你,让往返转换的意外可见。
100% 基于浏览器的隐私
所有解析都在你的浏览器本地运行。你的 JSON — 包括凭据、令牌和内部服务细节 — 绝不会被上传、存储或记录。
示例
Cargo.toml 源
{
"package": {
"name": "my-app",
"version": "1.0.0",
"edition": "2021"
},
"dependencies": {
"serde": { "version": "1.0", "features": ["derive"] },
"tokio": { "version": "1", "features": ["full"] }
}
} 从 JSON 生成 Rust 的 Cargo.toml — 嵌套对象变成 [表],内联对象变成内联表,与 Cargo 的期望完全一致。
pyproject.toml 源
{
"build-system": {
"requires": ["hatchling"],
"build-backend": "hatchling.build"
},
"project": {
"name": "my-package",
"version": "0.3.1",
"requires-python": ">=3.10",
"dependencies": ["requests>=2.31", "pydantic>=2.0"]
}
} 从 JSON 项目元数据生成 PEP 621 的 pyproject.toml — 当某个工具或 API 产出 JSON 而你需要 TOML 形式时很有用。
应用设置
{
"title": "My Service",
"debug": false,
"port": 8080,
"database": {
"host": "localhost",
"port": 5432,
"pool_size": 10
},
"features": ["auth", "metrics", "tracing"]
} 把扁平的应用设置对象转换为 TOML — 顶层标量留在顶部,嵌套的 database 对象变成一个 [database] 表。
服务器(表数组)
{
"servers": [
{ "name": "alpha", "ip": "10.0.0.1", "ports": [8001, 8002] },
{ "name": "beta", "ip": "10.0.0.2", "ports": [9001] }
]
} 对象数组在 TOML 中会变成表数组([[servers]])— 这是表达重复段落的惯用方式。
Netlify 配置源
{
"build": {
"command": "npm run build",
"publish": "dist",
"environment": { "NODE_VERSION": "20" }
},
"redirects": [
{ "from": "/old", "to": "/new", "status": 301, "force": true }
]
} 把 JSON 部署配置转成 netlify.toml,带有嵌套的 [build] 和 [build.environment] 表以及一个 [[redirects]] 表数组。
含点分结构的配置
{
"tool": {
"ruff": { "line-length": 100, "target-version": "py310" },
"black": { "line-length": 100 }
}
} 深度嵌套的 JSON 对象会变成像 [tool.ruff] 和 [tool.black] 这样的点分 TOML 表 — 正是 pyproject.toml 工具链所期望的形态。
如何使用
- 1
粘贴你的 JSON
在上方输入框中输入或粘贴你的 JSON。你也可以点击「加载示例」来试用 Cargo.toml 源、pyproject.toml 源或应用设置对象。
- 2
查看实时 TOML 输出
TOML 会即刻出现在输出面板。如果你的 JSON 有顶层数组或 null 值,工具会准确解释该怎么做,而不是产出损坏的输出。
- 3
复制或下载
点击「复制」把 TOML 抓到剪贴板,或点击「下载」保存为 .toml 文件,供 Cargo、Poetry、Hugo、Netlify 或任何读取 TOML 的工具直接使用。
常见 JSON 转 TOML 陷阱
顶层数组或标量
TOML 文档的根必须是一个表(对象)。JSON 数组或孤立值不能作为 TOML 文档。把它包在一个键下即可转换。
[1, 2, 3]
{ "items": [1, 2, 3] } 对象中的 null 值
TOML 没有 null 类型,因此值为 null 的对象键会在转换时被丢弃。工具会提醒你哪些键被移除了。如果你需要保留该键,请给它一个真实的值或一个空字符串。
{ "name": "a", "nickname": null } { "name": "a", "nickname": "" } 数组内部的 null
TOML 数组不能包含 null 或空缺,因此像 [1, null, 3] 这样的 JSON 没有有效的 TOML 输出。请在转换前移除该 null 或用一个真实的值替换它。
{ "ports": [8001, null, 8003] } { "ports": [8001, 8003] } 无效的 JSON 语法
输入必须首先是有效的 JSON。尾随逗号、单引号和未加引号的键是从 JavaScript 抄来的常见错误,它们不是有效的 JSON,必须在转换前修正。
{ 'name': 'a', 'active': true, } { "name": "a", "active": true } 小数部分为零的浮点数会变成整数
TOML 会把小数部分为零的浮点数(1.0)写作整数 1,从而在往返转换中改变其类型。工具会提醒你。如果该值在概念上就是整数,这没问题;如果它必须保持为浮点数,对于整数值 TOML 无法保留这一点。
{ "ratio": 1.0 } → ratio = 1 { "ratio": 1.5 } → ratio = 1.5 在同一个键上混用对象与数组
一个 JSON 键必须一致地是对象或数组,才能映射为表或表数组。数据集中形态不一致会产出令人困惑的 TOML — 请先把结构规范化。
{ "server": { "a": 1 }, "server": [1] } { "server": { "a": 1 }, "servers": [1] } 常见使用场景
- 生成 Cargo.toml
- 把结构化的 JSON — 来自脚手架工具、API 或脚本 — 转成有效的 Rust Cargo.toml,自动产出嵌套的 [dependencies] 表和内联表。
- 生成 pyproject.toml
- 把 JSON 项目元数据转换为 PEP 621 的 pyproject.toml,包括点分的 [tool.*] 表,让产出 JSON 的工具链能够生成 Python 打包配置。
- 从 JSON 生成人可编辑的配置
- 把应用的 JSON 设置转变为可读的 TOML 配置文件,让人可以舒适地编辑,之后再手动加上注释。
- 部署配置生成
- 从 JSON 产出 netlify.toml、foundry.toml 或类似的平台配置,把嵌套对象和对象数组变成那些工具期望的表和表数组。
- 配置格式迁移
- 把配置从基于 JSON 的系统迁移到基于 TOML 的系统,用本转换器作为桥梁,并借助 null 与顶层警告来捕捉任何无法映射的内容。
- 原型化 TOML 结构
- 用 JSON 勾勒一份配置 — 一种大多数开发者都能流畅书写的格式 — 然后转换为 TOML,在把它提交到仓库前查看惯用的表与表数组布局。
技术细节
- RFC 8259 JSON 解析
- JSON 输入使用浏览器原生的 JSON.parse() 解析,它完全符合 RFC 8259。在序列化之前,工具会检查顶层值是否为对象,并扫描 null 值,以便对被丢弃的对象键发出警告,或以精确路径拒绝数组内部的 null。
- 通过 smol-toml 输出 TOML 1.0.0
- TOML 使用 smol-toml 库生成,这是一个零依赖、完全符合 TOML 1.0.0 的序列化器。嵌套对象变成表,深度嵌套对象变成点分表,对象数组变成表数组。小数部分为零的浮点数会按 TOML 规则写作整数,并附带一条警告。
- 100% 基于浏览器 — 无上传、无服务器
- 所有处理都在你浏览器的 JavaScript 引擎中进行。任何时刻都不会传输数据。大于 200KB 的输入会从实时切换到手动模式(需显式点击「转换」),以保持界面响应流畅。
最佳实践
- 把顶层数组包在一个键下
- 如果你的数据天生就是 JSON 数组,请在转换前把它包在一个带描述性键的对象里({ "items": [...] })。TOML 文档的根必须是一个表,而这个键会在输出中给你的数组一个清晰的名字。
- 决定 null 应该表示什么
- 在转换前,决定 null 字段应该消失(丢弃该键)还是携带一个值。TOML 会丢弃对象中的 null 并拒绝数组中的 null,因此先在你的 JSON 中解决它们,能得到可预测、完整的输出。
- 用嵌套对象进行分组
- 把相关的设置分组到你 JSON 中的嵌套对象里 — 它们会在 TOML 中变成干净的 [表] 和点分表,比一大堆扁平的键可读得多,也与 Cargo 和 pyproject 配置的组织方式一致。
- 先验证你的 JSON
- 如果你的 JSON 是手写的或来自不可靠的来源,请用我们的 JSON 格式化工具 验证它,在转换为 TOML 前捕捉尾随逗号和引号错误。
- 转换后再添加注释
- JSON 没有注释,因此不会有任何注释被带过来。由于 TOML 支持 # 注释,请手动给生成的 TOML 加上文档说明 — 这本就是把人工编辑的配置迁移到 TOML 的主要原因之一。
常见问题
如何在线将 JSON 转换为 TOML?
什么是 TOML,为什么要把 JSON 转换为它?
为什么我的 JSON 顶层必须是对象?
把 JSON 转换为 TOML 时,null 值会怎样?
嵌套对象和数组是如何转换为 TOML 的?
像 1.0 这样的浮点数会怎样?
我的 JSON 数据会被发送到任何服务器吗?
我可以把 TOML 转换回 JSON 吗?
如何在命令行把 JSON 转换为 TOML?
如何在 Python、Rust 或 Node.js 中把 JSON 转换为 TOML?
转换器会保留键的顺序吗?
JSON 输入有文件大小限制吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
Base64 转图片转换工具
编码和格式化
在浏览器中把 Base64 字符串或 data URI 解码还原为图片。预览、读取尺寸与 MIME,再下载为 PNG、JPG、GIF、SVG。无需上传。
CSV 转 JSON 转换器
编码和格式化
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
.env 转 JSON 转换器
编码和格式化
粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。
免费 HTML 实体解码器 — 解码 HTML
编码和格式化
在线解码 HTML 实体、还原转义后的 HTML——免费、免注册、100% 在浏览器中运行。把命名、十进制和十六进制引用转回字符;绝不上传。
免费 HTML 实体编码器 — 转义 HTML
编码和格式化
在线编码 HTML 实体、转义特殊字符(< > & " ')——免费、免注册、100% 在浏览器中运行。支持命名、十进制或十六进制输出;绝不上传。