JSON 转 YAML
在浏览器内将 JSON 转换为 YAML 的免费工具。无需上传和注册,保持键顺序并附带行号显示语法错误。也可用于 Kubernetes / OpenAPI / Docker Compose 的配置文件编写。
JSON to YAML 转换工具
主要用途
当想把用 JSON 编写的配置或 API 响应(如 Kubernetes 清单、Docker Compose、GitHub Actions 工作流、Ansible playbook、Helm 的 values.yaml 等)迁移到 YAML 形式的配置文件时,可以使用本工具。想把从 API 返回的 JSON 直接作为 config 使用时,只需粘贴即可转换为易读的 YAML。
转换示例
输入示例:粘贴 { "name": "formatarc", "features": ["json", "yaml"] } 后,输出会整理为 name: formatarc / features: ["json", "yaml"] 这样的基于缩进的 YAML。不再需要引号,数组和嵌套结构也能以自然的缩进表示。
JSON 与 YAML 的主要差异
YAML 用缩进表示层级,因此不需要花括号,字符串也基本不需要引号。YAML 可以写注释(# 行),但 JSON 按规格不能写,因此如果 JSON 输入包含注释,会在转换阶段被排除。本工具保持键顺序与输入一致地输出为 YAML。
| 観点 | JSON | YAML |
|---|---|---|
| 结构 | 花括号·方括号 | 缩进 |
| 字符串 | 总是带引号 | 引号基本不需要 |
| 注释 | 不可 | 可用 # 书写 |
| 键顺序 | 本工具中保持 | 本工具中保持 |
| 主要用途 | API·数据交换 | 配置文件·CI/CD |
将 OpenAPI / Swagger 规格的 JSON 转换为 YAML
OpenAPI 3.0 / 3.1 或 Swagger 2.0 规格常以 JSON 编写或输出,但编辑器、Lint 工具、CI 更偏好 YAML。直接粘贴 JSON 规格即可在不破坏 $ref 引用、路径键、组件顺序的情况下转换为 YAML。本工具不会按键重新按字母顺序排序,因此规格结构不会损坏。可避免通用格式化工具导致的 schema 损坏,可直接用于 Redoc、Swagger UI、Spectral 的 Lint。
转换流程
首先作为 JSON 正确解析,然后将该对象重新输出为 YAML。如果输入损坏,会在 JSON 阶段返回错误并显示大致行号。不会发送到服务器,所有处理在浏览器内完成。详细的转换步骤和陷阱在另一篇「JSON YAML 转换」指南中说明。
本工具保持与无法保持的内容
键顺序、嵌套结构、值的型别(字符串·数字·布尔值·null)会原样保持。由于 JSON 没有注释,YAML 输出也不包含注释。输出风格以重视可读性的块形式为基本。
CLI 单行命令: yq / Python / Node.js
适合偏好终端或想集成到 CI/CD 流水线的情况。以下单行命令同样可以获得保持键顺序的相同块形式 YAML。包含多文档、块标量等边缘案例的详细步骤在 JSON YAML 转换指南中说明。
yq -P -o=yaml '.' input.json > output.yamlpython -c "import json,sys,yaml; yaml.safe_dump(json.load(sys.stdin), sys.stdout, sort_keys=False)" < input.jsonnode -e "const y=require('js-yaml'),f=require('fs'); console.log(y.dump(JSON.parse(f.readFileSync(0,'utf8'))))" < input.json