JSON / YAML / TOML 转换 - 在线工具

JSON、YAML、TOML 三格式互转,自动检测源格式,语法错误给出行号列号,附 5 个常用配置模板与缩进选项

使用说明

JSON、YAML、TOML 三种配置格式在线互转:粘贴内容后自动识别输入格式(也可以手动指定),实时给出目标格式的结果,支持 JSON/YAML/TOML 之间任意方向的 6 种转换,也支持同格式的重新格式化。附 package.json、tsconfig.json、docker-compose.yml、GitHub Actions、Cargo.toml 五个常用模板,一键载入即可看到真实配置的转换效果。

语法错误会定位到**行号与列号**并给出中文说明(如「YAML 语法错误,第 3 行 第 5 列:expected ',' or ']'」),而不是只报一句 failed to parse —— 转换前先校验,比转换失败后再回头找错高效得多。

三种格式的能力边界不同,转换时工具会按目标格式自动适配并逐条提示:**TOML 没有 null**(源数据里的 null 会被移除)、**TOML 顶层必须是表**(顶层是数组或标量时会明确报错)、**YAML 不能用 Tab 缩进**(选了 Tab 会自动回退为 2 空格)、**JSON 没有日期类型**(YAML/TOML 里的日期会转成 ISO 字符串)、**JSON 不支持 NaN/Infinity**(按标准转为 null)。

常见问题

输入格式可以自动识别吗?

可以。工具会先看内容形态(以 { 或 [ 开头按 JSON 处理、出现行首 key = value 按 TOML、出现行首 key: value 或 - 开头按 YAML),再用解析结果兜底。之所以不能只靠「谁能解析成功」来判断,是因为 YAML 极其宽松 —— 几乎任何文本都能被它当成字符串解析成功,那样自动检测会永远判定为 YAML。也可以在上方手动指定输入格式。

为什么 JSON 转 TOML 时报错说「顶层必须是表」?

因为 TOML 的文档结构就是一张表(键值对集合),无法表示「顶层是数组」或「顶层是单个值」的文档。如果源数据是数组,可以把它包在一层键里,例如把 [{...}, {...}] 改成 {items: [{...}, {...}]} 再转换。

转换后数据会不会丢?

不会静默丢。三种格式的能力有差异,凡是需要适配的地方都会在结果上方逐条列出,例如 TOML 不支持 null 时会说明「已移除 items[2]:TOML 不支持 null」,YAML 日期转 JSON 时会说明转成了 ISO 字符串。可以先看提示再决定是否接受。

缩进选项对哪些格式生效?

对 JSON 与 YAML 生效,可选 2 空格、4 空格或 Tab。TOML 的缩进由标准约定(表头、键值对通常不缩进),没有可调空间,因此该选项不影响 TOML 输出;另外 YAML 规范禁止用 Tab 作缩进,选择 Tab 时会自动改用 2 空格并给出提示。

有示例模板吗?

有 5 个常用模板:package.json、tsconfig.json(JSON)、docker-compose.yml、GitHub Actions(YAML)、Cargo.toml(TOML)。选择模板会把内容载入输入框并立即转换,适合先看看真实配置转成另一种格式长什么样。

同类工具

常用配置转换示例(工具实际输出)

docker-compose.yml(YAML)→ JSON

{
  "version": "3.8",
  "services": {
    "web": {
      "image": "nginx:1.25-alpine",
      "ports": [
        "80:80",
        "443:443"
      ],
      "volumes": [
        "./html:/usr/share/nginx/html:ro"
      ],
      "depends_on": [
        "api"
…(完整结果请在上方工具中查看)

package.json(JSON)→ YAML

name: my-web-app
version: 1.2.0
private: true
scripts:
  dev: vite
  build: vite build
  lint: eslint src
dependencies:
  vue: ^3.4.0
  pinia: ^2.1.0
devDependencies:
  vite: ^5.0.0
  typescript: ^5.3.0
engines:
…(完整结果请在上方工具中查看)

Cargo.toml(TOML)→ JSON

{
  "package": {
    "name": "my-cli",
    "version": "0.3.1",
    "edition": "2021",
    "description": "一个示例命令行工具"
  },
  "dependencies": {
    "serde": {
      "version": "1.0",
      "features": [
        "derive"
      ]
    },
…(完整结果请在上方工具中查看)