开发者工具 · JSON / 数据格式

JSON 转 YAML

双向互转

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 74 次使用
JSONYAML 编辑任一侧实时互转
JSON JavaScript Object Notation
YAML YAML Ain't Markup Language
就绪 · 左侧填 JSON 或右侧填 YAML,另一侧自动互转,全程本地处理
第一节

关于本工具

About

在 YAML 配置里粘贴一段 JSON 后,发现缩进全乱、冒号后丢了空格——手动改十层嵌套的缩进,比写代码还折磨。这个工具把 JSON 的括号结构直接转成 YAML 的缩进层级,数组、嵌套对象、空值都能正确映射,反之亦然。转换全程在浏览器本地执行,不经过任何服务器,配置文件里的敏感字段不会离开设备。

使用场景

API 响应联调

后端返回 JSON,前端用 YAML 写配置。联调时发现接口返回的嵌套结构(如用户权限树)与本地 YAML 配置结构不一致。把 JSON 粘贴进工具转成 YAML,逐层对比缩进和键名,3 分钟内定位到后端多了一级空对象,而非逐行翻代码。

K8s 配置迁移

项目从 Docker Compose 迁移到 Kubernetes,原 docker-compose.yml 里的 volumes 和 networks 段需要转成 K8s 的 JSON 格式的 ConfigMap。手动改写易漏引号或逗号。把 YAML 段复制到工具转 JSON,粘贴即用,避免因格式错误导致 Pod 拉取失败。

GitHub Actions 排错

写 workflow 时把 .github/workflows/deploy.yml 某段缩进写歪了,GitHub 报 YAML 解析错误。把 YAML 转成 JSON,JSON 解析器会直接报出具体行号和多余空格位置,而非 YAML 的模糊提示。定位到第 14 行多了一个空格,修复后 30 秒通过。

Ansible Playbook 审计

同事提交的 playbook.yml 有 400 行,要检查 tasks 里是否混用了 JSON 和 YAML 语法(如某些模块参数用 JSON 对象写法)。把整个 playbook 转 JSON,所有混合格式会被统一序列化,一眼看出某个 task 的 dict 键值对写成了数组,避免了运行时参数覆盖。

OpenAPI 文档校对

Swagger 编辑器默认用 YAML 写 API 规范,但评审时同事习惯看 JSON 格式。把 YAML 转成 JSON 后,用 diff 工具对比生成的 JSON 与预期 JSON 结构,发现 /users 接口的 response schema 里少了一个 required 字段。

第二节

使用指南

Getting Started

使用步骤

  1. 1在左侧输入框粘贴或键入 JSON 文本,编辑器自动高亮语法错误,无效 JSON 会标红提示
  2. 2点击「→ YAML」按钮,转换结果即时显示在右侧面板,缩进与键值对结构自动对齐
  3. 3点击右侧面板的「复制」图标,YAML 内容写入剪贴板,按钮短暂显示「已复制」反馈
  4. 4如需反向转换,在右侧输入 YAML 后点击「→ JSON」按钮,结果同样实时生成并支持复制

输入输出示例

输入输出说明
{ "name": "张三", "age": 30, "isStudent": false }name: 张三 age: 30 isStudent: false常规:简单对象,验证基本字段类型(字符串、数字、布尔)的转换准确性,无嵌套无数组
{ "users": [ {"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"} ] }users: - id: 1 name: Alice - id: 2 name: Bob常规:数组嵌套对象,验证 YAML 列表缩进与 JSON 数组的对应关系,常见于 API 响应
{}{}边界:空对象,验证工具不会报错或输出空行,保持结构一致性
nullnull边界:JSON 字面量 null,验证工具能否正确处理非对象/数组的顶层值,部分工具会误判为非法输入
{ "nested": { "deep": { "value": 42 } } }nested: deep: value: 42边界:深层嵌套对象,验证缩进层级是否正确,避免多级嵌套时缩进错位
{ "message": "Hello\nWorld" }message: "Hello\nWorld"易错:含换行符的字符串,验证 YAML 是否保留转义或使用双引号包裹,避免换行被解释为多行
{ "price": 19.99, "count": 100, "ratio": 0.001 }price: 19.99 count: 100 ratio: 0.001常规:多种数值类型(小数、整数、极小值),验证数值精度不被丢失,YAML 默认不引号包裹数字

常见错误对照

1.JSON 末尾多余逗号导致解析失败

✗ 错误{"name": "Alice", "age": 30,}
✓ 修复{"name": "Alice", "age": 30}

JSON 规范(RFC 8259)禁止数组或对象的最后一个元素后出现逗号,而 YAML 允许。工具按 JSON 标准解析,多余逗号会直接报错。

2.JSON 键名未用双引号包裹

✗ 错误{name: "Alice", age: 30}
✓ 修复{"name": "Alice", "age": 30}

JSON 要求所有键名必须用双引号括起来,这是与 JavaScript 对象字面量的关键区别。不加双引号会被解析器视为语法错误。

3.JSON 字符串内用了单引号代替双引号

✗ 错误{'name': 'Alice', 'age': 30}
✓ 修复{"name": "Alice", "age": 30}

JSON 标准只接受双引号作为字符串定界符,单引号在 JSON 中是非法字符。YAML 虽支持单引号,但此工具先按 JSON 解析,单引号会导致解析中断。

4.JSON 中使用了注释

✗ 错误{"name": "Alice" /* 这是注释 */}
✓ 修复{"name": "Alice"}

JSON 官方规范不支持任何形式的注释(// 或 /* */)。虽然 YAML 支持 # 注释,但 JSON 解析器遇到注释会直接抛出语法错误。

5.数值字符串未加引号,被转为数字类型

✗ 错误{"zip": 10001}
✓ 修复{"zip": "10001"}

JSON 中 10001 是数字类型,转 YAML 后也会保留为数字。若原意是邮编字符串(如 02118),不加引号会导致前导零丢失,语义变化。

6.布尔值或 null 未正确小写

✗ 错误{"active": True, "data": Null}
✓ 修复{"active": true, "data": null}

JSON 的布尔值和 null 必须全小写(true/false/null)。Python 风格 True/False/None 或 JS 风格 undefined 都不被 JSON 解析器接受。

7.深层嵌套 JSON 未缩进,转 YAML 后层次混乱

✗ 错误{"a":{"b":{"c":1}}}
✓ 修复{"a": {"b": {"c": 1}}}

虽然 JSON 解析不依赖缩进,但 YAML 对缩进敏感。输入结构清晰(空格分隔键值、适当换行)可避免 YAML 输出因缩进歧义导致解析错误。

第三节

工作原理

How It Works

核心公式

YAML = JSON 结构映射为缩进层级 + 键值对

变量说明

  • JSON 对象键值对集合,如 {"a":1}
  • 缩进层级每层 2 空格,表示嵌套深度
  • YAML 键值对key: value 格式,冒号后空格

示例

JSON 输入 {"name":"Alice","age":30,"hobbies":["reading","coding"]} 转换为 YAML: name: Alice age: 30 hobbies: - reading - coding 其中数组元素用短横线缩进表示,每个键值对冒号后跟一个空格,嵌套对象每层增加 2 空格缩进。

输入JSON 文本词法解析拆分为 Token(键 / 值 / 结构符)校验语法合法性结构转换对象 → 缩进层级数组 → 列表项字符串加引号判断输出YAML 文本
用户输入 本地处理 输出结果
第五节

常见问题

Q & A
我有一大段 JSON,直接复制进去就能转吗?

可以,直接粘贴到输入框即可。本工具纯前端运行,不限制字符数,但浏览器本身对超大内容(比如几百 KB 以上)的渲染和复制可能会有短暂卡顿,建议分批处理。粘贴后点「转换」按钮,结果会实时显示在右侧。如果 JSON 格式有误,工具会提示具体错误位置,方便修正。

JSON 转 YAML 之后,缩进变了,是不是转错了?

缩进变化是正常的。JSON 里对象用花括号 {} 和逗号分隔,不依赖缩进;YAML 则完全靠缩进表示层级关系。转换时工具会按标准 2 空格缩进输出 YAML。如果你原来的 JSON 缩进是 4 格或 tab,转成 YAML 后缩进量会统一为 2 格,层级关系不变,不是错误。

为什么我 JSON 里的 null 值转成 YAML 后变成了 ~ 或空行?

这是 YAML 标准规定的。JSON 的 null 在 YAML 中有两种等效写法:一个是 ~(波浪号),另一个是直接不写值(即空键值)。本工具默认输出为 null 对应的 YAML 写法,具体是 ~ 还是空行取决于 JSON 原始结构。如果你习惯看显式的 null,可以手动替换回 null,不影响后续解析。

JSON 里的数组转成 YAML 后,为什么多了一行短横线?

YAML 用短横线 - 表示列表项,对应 JSON 的数组元素。比如 JSON 数组 ["a", "b"] 转成 YAML 会变成: - a - b 每项前面都有一个 - 和一个空格。这是 YAML 的标准写法,不是多出来什么。如果你觉得不习惯,可以手动合并成 JSON 格式的方括号,但那样就不是合规的 YAML 了。

这个工具能批量转多个 JSON 文件吗?

不能直接批量上传文件。本工具是纯前端页面,只处理当前输入框里的内容。如果需要批量转换多个 JSON 文件,可以逐个粘贴转换,或者用脚本批量处理。不过大多数场景下,一次只处理一个 JSON 对象或数组,所以单输入框设计对日常使用足够。如果确实有大量文件要转,建议用本地命令行工具如 yq 或 jq。

JSON 里带注释(// 或 /* */)能转吗?

不能。标准 JSON 标准(RFC 7159)不允许注释,本工具严格按标准解析。如果 JSON 里包含 // 或 /* */ 注释,工具会报解析错误。建议先手动删掉注释,或者用支持注释的 JSON5 格式处理后再转。如果你经常处理带注释的配置,可以先用其他工具把注释去掉,再粘贴进来。

YAML 转回 JSON 后,顺序变了,是不是有问题?

JSON 对象本身不保证键的顺序(标准里是无序的),但大多数浏览器和工具会按插入顺序保留。YAML 转回 JSON 时,本工具会保持 YAML 中出现的键顺序输出。如果你发现顺序和之前不一样,很可能是 YAML 本身有多个相同键名(YAML 允许重复键,但 JSON 不允许),或者原始 JSON 中键顺序本身就不固定。建议检查原始数据。

我转出来的 YAML 文件,别人用 Python 的 PyYAML 读不了,怎么办?

常见原因是 YAML 里用了制表符(Tab)缩进。YAML 标准规定只能用空格,不能用 Tab。本工具输出全用空格,但如果你在粘贴后手动编辑过,可能引入了 Tab。另外 PyYAML 对某些边缘语法(如多行字符串、特殊字符转义)处理比较严格。建议用本工具重新转一次,不要手动修改,然后直接复制粘贴到 Python 代码里。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭