JSON 转 YAML

把 JSON 配置转成缩进式 YAML,自动处理数字与字符串的类型歧义,本地转换不上传。

JSON 转 YAML

本地转换,内容不上传。转换后会校验 JSON 语法,语法有误会提示具体位置。

为什么配置文件常用 YAML

YAML 用缩进表达层级,不需要成对的括号和引号,同样的配置写出来行数更少、可读性更好。Kubernetes 清单、CI 流水线定义、Ansible 剧本、Docker Compose 文件都是 YAML 格式。但 YAML 的缩进敏感,多一个空格或少一个空格含义就变了,而且它支持锚点和引用,复杂文件人工核对成本不低,所以工程上常见做法是用 JSON 生成、用 YAML 阅读。

转换时要注意的细节

数字和字符串的区分是重点。JSON 里 "8080" 是字符串,8080 是数字,转换后如果被 YAML 解析器当成另一种类型,配置就会出错,所以转换器会给可能被误判的字符串加引号。

布尔值同理。JSON 的 true 和字符串 "true" 在 YAML 里都可能被解析成布尔真值,本工具会把字符串形式的 true、false、yes、no、null 加引号保护。

嵌套与数组

对象转成缩进的键值对,数组转成以短横线开头的列表。如果数组元素本身是对象,短横线与第一个键写在同一行,后续键对齐到短横线之后,这是 YAML 里最容易写错的地方。

格式对照

特征JSONYAML
可读性括号层级多,长文件难读缩进直观,接近自然书写
注释标准不支持支持 # 注释
缩进敏感不敏感敏感,空格数量必须一致
解析速度快较慢
典型用途接口传输、数据存储配置文件、编排清单
多文档需外层数组用 --- 分隔

常见问题

转换后数字变成字符串了怎么办?▼
本工具会给看起来像数字的字符串加引号,防止被 YAML 解析器当成数字。如果您的字段本来应该是数字,说明源 JSON 里它就是字符串,需要回源修正数据类型。
YAML 缩进能用 Tab 吗?▼
不能。YAML 规范明确禁止使用制表符缩进,必须用空格。混用空格和 Tab 是解析报错最常见的原因。
为什么 YAML 里有的值加了引号?▼
因为不加会被解析成其他类型。比如字符串 "true" 不加引号会被当成布尔真值,"8080" 会被当成数字,"yes" 会被当成真值。加引号是为了保住原始类型。
支持多文档 YAML 吗?▼
本工具把一份 JSON 转成一份 YAML。需要多文档时,可以把 JSON 顶层写成数组,转换后在每个元素之间插入 --- 分隔符。
生成的 YAML 能直接用于 Kubernetes 吗?▼
可以作为起点。K8s 清单还需要补 apiVersion、kind、metadata 等必需字段,并且要注意某些字段的值必须是字符串(如注解里的版本号),建议套用后先用 kubectl 的 dry-run 校验。