JSON 转 YAML

免费在线JSON转YAML转换器,一键将JSON转为标准YAML 1.2配置,支持自定义缩进、智能修复JSON语法错误,可生成Kubernetes资源清单、Docker Compose、GitHub Actions等YAML配置文件。

相关推荐

什么是 YAML?为什么要把 JSON 转成 YAML?

YAML(YAML Ain't Markup Language,即 YAML 不是标记语言)是一种人类友好的数据序列化格式,设计目标是让配置文件易读易写。YAML 1.2 是当前稳定版本(yaml.org/spec/1.2.2),由 Clark Evans 在 2001 年提出,现在广泛用于 Kubernetes、Docker Compose、GitHub Actions、Ansible、CircleCI、Prometheus 等几乎所有主流 DevOps 工具的配置。YAML 的设计哲学强调可读性高于简洁性,因此牺牲了 JSON 那种机器友好的紧凑语法,换来对人类编辑友好的缩进+注释结构。

JSON 与 YAML 互为超集(JSON 是 YAML 的子集),从 JSON 转 YAML 在技术上是简单的语法重新格式化,但实际意义巨大:①可读性提升——YAML 用缩进代替花括号和逗号,关键字前的引号也可以省略,可读性显著提高;②注释支持——YAML 支持 # 注释,JSON 标准不支持(虽然很多工具通过 #!shebang 或宽松解析支持);③多文档支持——YAML 通过 --- 分隔符支持单文件多文档(multi-document),Kubernetes 一个 yaml 文件可包含 Deployment+Service+ConfigMap;④类型自动识别——YAML 不需要引号也能识别数字、布尔、null,配置文件更干净。

YAML 有三种基本数据结构:①标量(scalar)——字符串、数字、布尔、null 等单个值;②序列(sequence)——类似 JSON 数组,用 - 起始表示;③映射(mapping)——类似 JSON 对象,用 key: value 表示。YAML 还有几种高级结构:锚点(&anchor)和引用(*anchor)允许复用配置块;块样式(| 保留换行)和折叠样式(> 换行变空格)控制多行字符串输出;显式标签(!!str、!!int)可强制类型。这些特性使 YAML 在复杂配置场景中比 JSON 更强大。

JSON 转 YAML 的常见动机有:①项目需要部署到 Kubernetes 但现有配置是 JSON 格式;②团队决定用 YAML 统一管理所有配置文件;③对接第三方 API 时需要 YAML 格式的请求体(OpenAPI、Swagger);④从 API 网关、CI/CD 平台导出的 JSON 配置需要转为人类可读的 YAML;⑤把 mock 数据从 JSON 转为 YAML 便于写测试 fixture。本工具覆盖了所有这些场景。

转换过程本质是数据结构重映射:JSON.parse() 把文本解析为 JavaScript 对象(AST),js-yaml 的 dump() 函数递归遍历每个节点——字符串、数字、布尔、null 直接输出,数组转为 - 列表,嵌套对象转为缩进层级。整个过程纯本地完成,不需要任何外部依赖(除了 js-yaml 库本身),转换结果 100% 兼容所有标准 YAML 解析器。

适用场景

  • Prometheus 告警规则导出:把 Alertmanager 页面导出的 JSON 告警分组规则转为 alertmanager.yaml,部署到生产环境。
  • GitOps 仓库初始化:Argo CD Application 模板工具返回的 JSON 描述转为 application.yaml,与 Helm Chart 一起纳入 Git 管理。
  • Terraform Plan 结果二次编辑:把 terraform show -json 的输出挑出 output/resource 段后转为可读的 YAML,便于在 PR 里贴出供评审。
  • 前端 Mock 数据落库:把 json-server、MSW 返回的 fixture JSON 转 YAML 后随项目一起提交给后端,作为联调前的接口契约。
  • ChatOps 机器人配置:把企业微信/钉钉自定义机器人 webhook 配置 JSON 转 YAML 提交到自研告警平台,避免直接暴露密钥。
  • ESLint/Prettier 配置回退:编辑器的 settings.json 改坏后,从备份 JSON 还原并转成 .eslintrc.yaml 提交回代码库。
  • API 网关路由导出:把 Kong/APISIX 控制台导出的 route JSON 转成 routes.yaml 后用 declarative config 模式重新导入。
  • 后端单元测试 Fixture:把 Go/Node 测试里手写的 struct/map 测试数据序列化为 JSON,再转 YAML 写入 testdata/*.yaml 文件做断言。
  • Swagger UI 截图替代:在 API 文档站点不能访问时,把 OpenAPI JSON 转为 YAML 贴到内部 Confluence,避免截图丢失字段。
  • CI/CD 多环境变量管理:把 Jenkins/GitLab CI 模板工具生成的 JSON env 段转成 values-dev.yaml / values-prod.yaml 走 Helm 分支差异化部署。
  • 日志平台解析规则:把 Filebeat/Fluentd 配置中心的 JSON 输入规则转成 filebeat.yaml,避免在 Kibana UI 里逐字段添加正则。
  • 代码评审补充材料:PR 里 JSON diff 不直观时,把变更前后的 JSON 都转成 YAML 附在评论里,让评审人直接看出缩进层级变化。
  • 无服务器函数部署:把 SAM/CDK 输出的 JSON 模板合并整理后转成 serverless.yml,用 serverless framework 部署到阿里云函数计算。
  • Postman Collection 转 Insomnia:把 Postman v2.1 Collection JSON 精简后转 YAML 导入 Insomnia,避免同事重装 Postman。
  • Istio VirtualService 调试:kubectl get virtualservice -o json 抓回本地后转成 YAML diff,方便在群里同步给 SRE 排查路由问题。

使用方法

  1. 粘贴 JSON 内容到左侧编辑器,或点击上传按钮选择 .json / .txt 文件,也可以点击「示例」加载预设样例
  2. 工具自动按 YAML 1.2 规范实时转换,右侧即时显示结果,可点击下拉菜单切换 2/4 空格缩进
  3. 如果 JSON 有语法错误(尾逗号、单引号、注释等),底部会出现「修复 JSON」按钮,点击一键自动修正
  4. 需要 Unicode 转义或字符串转义时,使用底部工具栏的「中文↔Unicode」「转义/反转义」按钮一键转换
  5. 结果满意后点击「复制」按钮复制 YAML 内容,或点击「下载」保存为 output.yaml 文件供项目使用

功能特点

  • 标准YAML 1.2规范输出:符合官方YAML 1.2规范,可直接用于Kubernetes、Docker Compose、GitHub Actions、Ansible等主流工具
  • 自定义缩进控制:支持2空格和4空格缩进切换,匹配不同项目代码风格(YAML官方推荐2空格)
  • 智能JSON修复:内置tryFixJSON引擎,自动检测并修复尾逗号、单引号、注释等常见JSON错误后转换
  • Unicode双向转换:一键将中文字符转为\uXXXX Unicode转义形式,或将Unicode转回中文,便于国际化场景
  • 字符串转义/反转义:一键给JSON中的双引号、反斜杠、换行添加反斜杠转义,或将转义字符串还原
  • JSON格式化与压缩:左侧输入区支持将JSON格式化为缩进美化版本,或压缩为单行最小化版本
  • 实时双向编辑:左侧粘贴JSON右侧即时查看YAML结果,输入即转换不用手动点按钮
  • 文件上传与下载:支持上传.json/.txt文件,处理后一键下载为config.yaml或output.yaml文件
  • 键盘快捷键支持:Shift+Cmd/Ctrl+F格式化、C压缩、U Unicode转、Z反向、/转义、.反转义、O上传、D下载、K清空
  • 拖动面板与历史记录:PC端左右面板可拖动调整宽度,自动保存最近200条历史便于回溯
  • 跳转JSON格式化:转换完成后一键跳转到JSON格式化工具继续美化、校验或压缩源数据
  • 纯前端本地处理:所有解析、转换、转义运算在浏览器JavaScript完成,含敏感配置不上传服务器

常见问题

怎么把 JSON 转成 YAML 格式?

将 JSON 内容粘贴到左侧编辑器,工具会自动按 YAML 1.2 规范转换为可读格式:键值对变成 key: value,嵌套对象通过缩进表示层级,数组变成 `- item` 列表语法。转换完成后可以一键复制或下载为 .yaml 文件使用。如 JSON 有语法错误(尾逗号、单引号、注释等),工具会自动尝试修复后再转换。

YAML 和 JSON 各自适合什么场景?

YAML 更适合人类可读的配置场景——Kubernetes 资源清单、Docker Compose、GitHub Actions、Ansible Playbook、CI/CD 流水线配置。JSON 更适合机器解析和数据交换场景——REST API 请求响应、微服务间通信、前端后端数据传输。简单判断:写配置选 YAML,传数据用 JSON。本工具也支持反向的 YAML 转 JSON。

JSON 转 YAML 后缩进应该是 2 空格还是 4 空格?

YAML 官方推荐 2 空格缩进(与 Python 风格一致),这是 Kubernetes、Docker Compose、GitHub Actions 等主流工具的默认风格。但部分项目(如某些 Ansible 旧项目、Google 内部风格)使用 4 空格。本工具支持 2/4 空格自由切换,点击输出区右上角下拉菜单即可即时改变缩进,无需重新转换。

生成的 YAML 可以直接用于 Kubernetes 吗?

可以。本工具严格遵循 YAML 1.2 官方规范,输出的 YAML 符合 Kubernetes YAML 解析器(kubectl apply)的语法要求。生成的 YAML 可以直接保存为 deployment.yaml、service.yaml 等文件,通过 kubectl apply -f 应用。注意:YAML 对缩进非常敏感,复制时不要引入额外的空格或使用 Tab。

支持生成多文档 YAML(用 --- 分隔)吗?

当前版本主要用于单文档 JSON → YAML 转换。如果你的 JSON 是多个独立对象的数组,转换后会按列表形式输出。如需多文档 YAML(每个对象前用 --- 分隔),转换后请手动在每个对象前加 --- 分隔符,或使用本站的 YAML 格式化工具进一步处理。

JSON 中包含中文/特殊字符会乱码吗?

不会。本工具完全支持 UTF-8 编码,包括中文、日文、韩文、Emoji 表情、特殊符号等所有 Unicode 字符。如果转换后需要把中文转为 \uXXXX 转义形式(比如嵌入 JavaScript 字符串字面量),可以使用工具底部的「中文转 Unicode」按钮一键转换;反向还原用「Unicode 转中文」。

JSON 字符串里的双引号和换行怎么处理?

YAML 支持多种字符串写法:①无双引号(适用于不包含特殊字符的简单字符串);②双引号包裹(支持 \n、\t 等转义);③单引号包裹(字面量,不转义);④| 块样式(保留换行);⑤> 折叠样式(换行变空格)。本工具默认输出双引号风格;如果 JSON 字符串里有换行,YAML 会自动用 \n 转义。工具底部提供「转义/反转义」按钮处理特殊场景。

JSON 转 YAML 后所有值都变成字符串了吗?

默认情况下工具会智能识别并保留 JSON 的原始类型:数字保留为 YAML 数字(不加引号),布尔值变为 true/false,null 变为 null 或 ~。但如果你希望所有值都是字符串(比如某些配置系统严格要求字符串),可以在转换后手动加引号,或者在 JSON 端把所有值包成字符串再转换。

本地浏览器转换,配置文件会上传吗?

不会。所有 JSON 解析、YAML 生成、字符串转义、Unicode 转换、JSON 修复全部在你的浏览器本地 JavaScript 引擎中完成,不会通过网络发送到任何服务器,断网也能正常使用。包含数据库密码、API 密钥、Kubernetes Secret 配置的 JSON 可以放心转换。

故障排查

JSON 报错「Unexpected token」怎么办?

这是 JSON 语法错误。常见原因:①末尾多余的逗号(trailing comma),如 {"a":1,};②单引号代替双引号,如 {'a':1};③键名没有双引号,如 {a:1};④注释 // 或 /* */。工具底部有「修复 JSON」按钮,会自动尝试补全尾逗号、补双引号、删除注释等。修复后重新转换即可。

kubectl apply 报错「yaml: invalid character」?

通常是缩进错误。YAML 严格要求空格缩进,混合使用 Tab 字符会导致解析失败。检查:①所有缩进是否都是空格(不是 Tab);②同一层级缩进空格数是否一致(2 或 4 空格);③缩进是否对齐嵌套层级。本工具输出使用纯空格缩进,不会混入 Tab,但如果手工复制粘贴时引入了 Tab 就会出问题。

YAML 字符串里的换行变成了 \n 怎么办?

默认情况下,JSON 字符串中的换行符(\n)转换为 YAML 时会被转义为 \n。如果希望保留真实换行(比如 Docker Compose 的 command 多行、配置文件多行字符串),需要在转换后手动改成 YAML 块样式:用 | 符号标识,例如:description: |\n 第一行\n 第二行。或者使用本工具的「反转义」按钮先把 JSON 中的 \n 转为真实换行再转换。

转换后的 YAML 里 null 值变成了 ~ 符号?

YAML 用 ~ 或 null 表示空值,两者等价。如果你使用的工具不识别 ~,可以手动替换为 null。或者在工具中切换输出选项让所有 null 显式输出 null 而非 ~。另外注意 YAML 1.1 中 NO/On/Off 会被解析为布尔值 false(Norway 问题),YAML 1.2 已修复,本工具输出符合 1.2 规范。

中文在 YAML 中显示为 \uXXXX 转义形式?

默认情况下,工具输出原生 UTF-8 中文(不会被转义)。如果意外看到 \uXXXX 转义形式,是因为:①输入的 JSON 中原本就是 Unicode 转义形式;②点击了底部「中文转 Unicode」按钮。可以用「Unicode 转中文」按钮反向还原,或在 JSON 源端把 \uXXXX 改成真实中文字符。

大文件转换浏览器卡顿怎么办?

工具做了实时转换优化(500ms 防抖),但超大文件(>1MB、几十万行)仍可能有压力。建议:①先用 JSON 格式化工具检查 JSON 是否合法;②确认是单条大 JSON 而不是多个独立 JSON 拼接;③超大配置文件(10MB+)建议用命令行工具如 yq、kubectl convert 处理;④如果浏览器卡死,关闭多余 tab 释放内存后重试。

术语表

YAML
YAML Ain't Markup Language(递归缩写),一种人类可读的数据序列化格式,是 Kubernetes、Docker Compose、Ansible 等 DevOps 工具的事实标准配置语言。
缩进(Indentation)
YAML 用缩进(必须是空格,不能用 Tab)表示层级关系,缩进错误会导致配置解析失败或含义改变,是 YAML 最常见的坑。
序列(Sequence)
YAML 的数组表示,用 - item 表示每个元素,相当于 JSON 的数组。
映射(Mapping)
YAML 的对象表示,用 key: value 表示每个键值对,相当于 JSON 的对象。
块样式(Block Scalar |)
YAML 多行字符串写法,用 | 符号标识,所有换行和缩进都会被保留,相当于 heredoc。
折叠样式(Folded Scalar >)
YAML 多行字符串写法,用 > 符号标识,单个换行会被替换为空格,连续两个换行才保留为段落分隔。
锚点与引用(Anchor & Reference)
YAML 用 &name 定义锚点,用 *name 引用同一份配置,避免重复,常见于 K8s 同一 Secret 在多处引用。
YAML 1.2
YAML 当前稳定版本规范(2009 年发布,2021 年小修订),本工具严格遵循此版本(yaml.org/spec/1.2.2)。
多文档 YAML(Multi-document)
YAML 支持单文件多文档,用 --- 分隔符分开不同文档,Kubernetes 一个 yaml 文件可包含 Deployment+Service+ConfigMap 多个资源。
Kubernetes YAML
Kubernetes 资源清单的 YAML 格式,必须包含 apiVersion、kind、metadata、spec 四个必填字段,是 K8s 部署的事实标准。
Norway 问题(YAML 1.1)
YAML 1.1 规范将 NO/On/Off 等解释为布尔值 false,导致国家名解析错误,YAML 1.2 已修复此问题,本工具输出符合 1.2 规范。
Docker Compose
Docker 多容器编排工具的配置文件,YAML 格式,定义 services、networks、volumes 等节,是容器化部署的事实标准。

JSON 类型与 YAML 写法映射表

本工具按以下规则将 JSON 类型转换为 YAML 类型:

JSON 类型YAML 写法说明
stringname: "Alice"YAML 默认无引号,含特殊字符时需双引号
integerport: 8080YAML 自动识别数字类型,无引号
floatratio: 3.14浮点数同整数,YAML 自动识别
booleanenabled: trueYAML 仅小写 true/false,YAML 1.1 还支持 yes/no
nullvalue: null 或 value: ~YAML 用 null 或波浪号表示空值
array- item1\n- item2YAML 用 - 起始每行一个元素
objectkey:\n sub: value对象用 key: value,嵌套用缩进表示
object array- name: a\n- name: b对象数组用 - 后跟键值对

YAML 字符串样式对照表

YAML 支持 6 种字符串写法,按需选择:

样式语法示例适用场景
无引号name: Alice简单字符串,最常用
双引号name: "Alice"含特殊字符、支持 \n 等转义
单引号name: 'Alice'字面量字符串,不转义
块样式bio: |\n line1\n line2保留所有换行和缩进(heredoc)
折叠样式bio: >\n line1\n line2单换行变空格,双换行分段
显式标签value: !!str 123强制类型,覆盖默认推断

JSON 转 YAML 示例对照

复杂 JSON 结构对应的 YAML 输出:

结构示例
JSON 输入{"name": "app", "port": 8080}
YAML 输出name: app port: 8080
JSON 输入{"server": {"host": "0.0.0.0", "port": 443}}
YAML 输出server: host: 0.0.0.0 port: 443
JSON 输入{"hosts": [{"ip": "10.0.0.1"}, {"ip": "10.0.0.2"}]}
YAML 输出hosts: - ip: 10.0.0.1 - ip: 10.0.0.2
JSON 输入{"spec": {"replicas": 3, "image": "nginx:1.25"}}
YAML 输出spec: replicas: 3 image: nginx:1.25

Privacy & Security

本工具所有 JSON 解析、YAML 生成、字符串转义、Unicode 转换、JSON 智能修复、文件读取全部在浏览器本地 JavaScript 引擎中执行,你的 JSON 内容和生成的 YAML 配置不会通过网络发送到任何服务器,也不会被记录或分析。包含数据库密码、API 密钥、Kubernetes Secret 配置的 JSON 可以放心转换。本地历史仅保存在你自己浏览器的 localStorage 中,关闭浏览器或清空缓存即可删除。

Authoritative References