JSON 转 YAML

在浏览器内将 JSON 转换为 YAML 的免费工具。无需上传和注册,保持键顺序并附带行号显示语法错误。也可用于 Kubernetes / OpenAPI / Docker Compose 的配置文件编写。

只在浏览器里处理
输入 JSONJSON
JSON 语法错误会附带大致行号显示。
5 lines · 85 bytes
输出 YAMLYAML
尚未执行。
0 lines · 0 bytes

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 一目了然对比
観点JSONYAML
结构花括号·方括号缩进
字符串总是带引号引号基本不需要
注释不可可用 # 书写
键顺序本工具中保持本工具中保持
主要用途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(单个 Go 二进制)
yq -P -o=yaml '.' input.json > output.yaml
Python(PyYAML)
python -c "import json,sys,yaml; yaml.safe_dump(json.load(sys.stdin), sys.stdout, sort_keys=False)" < input.json
Node.js(js-yaml)
node -e "const y=require('js-yaml'),f=require('fs'); console.log(y.dump(JSON.parse(f.readFileSync(0,'utf8'))))" < input.json

相关转换器