TOML 格式化 + 互转, 符合 TOML 1.0 规范, 支持 TOML / JSON / YAML 三向互转, 错误显示行列与上下文。
- 本地处理
- 分类 开发运维
- 适合 格式化、校验、压缩或检查和代码相关的文本。
输入有效内容后, 这里会显示结果。这个工具能做什么
为你实际会粘贴的配置文件写的 TOML 1.0 工具。Cargo.toml、 pyproject.toml、netlify.toml、Hugo 的 config.toml、多环境数据库 配置块、Discord / Telegram 机器人配置。可选 2 空格、4 空格或 Tab 缩进, 数组样式可强制单行或多行, 表内键可按字典序排序方便 做 diff, 解析后的树可以直接转 JSON 或 YAML, 反过来也能从 JSON / YAML 生成干净的 TOML。解析器覆盖 TOML 1.0 全部表面:点号键、 `[[products]]` 表数组、内联表、basic / literal 字符串 (单引号 / 三引号)、`\u` 转义、整数前缀 `0x` / `0o` / `0b` 与下划线分隔符、 `inf` / `-inf` / `nan`、RFC 3339 日期时间 (含 local time 与 local date)。语法错误带行号、列号、3 行上下文, 出错位置下方有 `^` 标记, 跟编译器一样准。100% 浏览器本地运行, 不出标签页, 粘 Cargo.toml 里的内部 token、staging 库密码也安全。
工具细节
- 输入
- 文本 + 数值
- 页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
- 输出
- 即时结果 + 复制
- 结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
- 隐私
- 浏览器本地处理
- 主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
- 保存 / 分享
- 可分享链接状态
- 关键设置会进入 URL,复制链接后别人能复现同一组参数。
- 性能预算
- 首屏 JS ≤ 35 KB
- 没有声明 WASM 依赖,适合快速打开和移动端使用。
- 适用场景
- 开发运维 · 程序员
- 分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。
怎么用
-
1. 输入
把内容粘贴或拖入工具面板。
-
2. 处理
点击按钮,在浏览器内本地处理,文件不上传。
-
3. 复制 / 下载
一键复制结果或下载到本地。
TOML 格式化 + 互转 适合怎么用
适合穿插在写代码、查问题、做 Review、上线前的小任务里。
适合开发场景
- 格式化、校验、压缩或检查和代码相关的文本。
- 把片段整理好再放进文档、工单、提交或交接材料。
- 不切换工具,快速检查一个小 payload。
开发检查项
- 压缩、混淆这类不可逆处理,先对副本操作。
- 除非确认工具本地处理,不要粘贴密钥和敏感片段。
- 转换后的代码上线前,仍要跑自己的测试或 lint。
下一步可以接着做
这些入口会把当前任务接到更完整的工具链里。
真实使用场景
提交前把乱掉的 `Cargo.toml` 整理回标准形态
调试时加了三个依赖, 现在 `Cargo.toml` 里 2 空格和 4 空格混 用, 还有一行 `features = ["serde", "tokio", "reqwest", "rustls"]` 拉到 95 列。粘进来, 点 "格式化 TOML", 勾上 "键按 A→Z 排序" 让 `[dependencies]` 按字典序排好 (CI lint 要的), 复制回去。 现在跟 main 的 diff 只剩你新增的三个依赖, 不再混着 40 行 空白格式抖动。
从 `pyproject.toml` 抽配置给一个 Python 脚本读
写一个脚本要读 `[project] name`、`version`、`dependencies`, 其他工具链都说 JSON。粘 `pyproject.toml`, 切换 "TOML → JSON", 复制。现在 `meta = json.loads(open(...).read())` 拿到的形状 和 `[project]` 完全一致, 不用引 `tomllib`, 也不用纠结 Python 3.11 标准库的细节。
把 YAML 的 CI 配置移植到 Rust 工具的 TOML
有一个 `.github/workflows/build.yml`, 想把里面的 job matrix 搬到 Cargo 旁边的 `xtask/config.toml` 里。粘 YAML 块, 切到 "YAML → TOML", 复制。输出里每个 job 是一个 `[[matrix]]` 表 数组元素, `xtask` 二进制用 `toml::from_str` 读。同一份矩 阵, 同一份事实来源, 两个格式。
排查 build 报 "TOML parse error" 但没给上下文的 `netlify.toml`
Netlify 的 build 报错只有 "TOML parse error at line ?? col ??" 一句, 没上下文。粘 `netlify.toml`, 这里给精确行号、列号, 加 3 行上下文, 出错字符下方有 `^`。多半是某个值没加引号 (`status = 301 force` 写法不对, 应该是 `force = true` 单 独一行) 或者 `[[redirects]]` 头少了 `]`。5 秒修完, 推上去。
多环境数据库配置在 staging 和 prod 之间对齐
一个 `db.toml` 里有 `[default]`、`[development]`、`[staging]`、 `[production]` 四个块。想确认 staging 和 production 之间只 有 `host` 和 `pool_size` 不一样。把两段都用 "键按 A→Z 排序" 格式化, 用 `git diff --no-index` 对比, 你只会看到这两处刻 意的差异。没人趁夜里偷偷改过别的字段。
从 JSON 模板生成 Discord / Telegram 机器人配置块
原型阶段用的是 JSON 形状的机器人配置, 但目标运行时 (Rust serenity、Python aiogram 配 TOML 扩展) 要 TOML。粘 JSON, 切 "JSON → TOML", 复制到 `config.toml`。`[[commands]]` 那一段 object 数组会变成 `[[commands]]` 表数组。框架的 `serde` 派生期望的就是这个形状。
常见踩坑
把 `.env` 当 TOML 粘进来然后失败。`.env` 允许 `KEY=value` 不加引号; TOML 要求带空格或特殊字符的字符串必须加引号。把每个值用引号包一下 (`KEY="value"`) 就能解析。
期待 `inf` / `nan` 在 TOML 转 JSON 时保留。JSON 规范禁止这两个值, 所以我们会平铺成 `null`, FAQ 里有说明。如果你的值真的是 `nan`, 几乎肯定是算法 bug, 该在源头修, 不是序列化的问题。
想格式化后保留注释。解析器刻意不保留注释, 因为加上这个功能解析器要翻 3 倍, 而绝大多数工作流用不上 (Prettier 的 TOML 模式也是这个取舍)。要看真正改动用 git diff。
把点号键当成 JSON 里的层级嵌套理解错。TOML 里 `a.b.c = 1` 和 `[a.b] c = 1` 完全一样。JSON 输出都是 `{a: {b: {c: 1}}}`。没有 "扁平带点号" 的 JSON 中间形式。
粘根是数组的 JSON 期望出 TOML。TOML 要求根是表 (object)。把数组先包成 `{ "items": [...] }`, 转换器会输出 `[[items]]` 表数组。
期待键排序把数组元素也排了。键排序只排表的 KEY。`[[products]]` 表数组的元素和 `[1, 3, 2]` 标量数组的元素都保持源顺序, 因为 TOML 语义上数组顺序是数据。
隐私说明
你粘的 TOML / JSON / YAML 不会离开浏览器。输入文本框内容刻意 不写进 URL。只有选项 (方向、缩进、数组样式、键排序) 会通过 `useUrlState` 同步到 URL。这意味着 "分享设置" 链接给同事打开 看到的是同样的工作流, 但他粘自己的配置, 你的内容不会跟着走。 解析器、序列化器、三向转换器都在标签页里跑 JavaScript, 没有 任何网络请求, 没有对文本框内容做埋点, 也不写 localStorage。粘 带内部 crate 仓库 token 的 `Cargo.toml`、带私有 PyPI URL 的 `pyproject.toml`、staging / production 数据库配置, 以及任何 不该出现在 Slack 截图或浏览器历史里的配置, 都安全。
常见问题
类似工具组合
做你这行的人, 还会一起用这些。