DevFormatLab

YAML 转换

YAML ⇔ JSON ⇔ Properties

YAML、JSON 与 Java .properties 多方向转换,附带严格校验。

YAML有效
JSON

转换完全在浏览器内进行,不会上传任何数据。

什么是 YAML 转换工具?

YAML 与 JSON 用不同的语法描述同一种结构化数据。YAML 采用缩进布局,支持注释、多文档流、可复用 anchor,对人类更友好,主宰着 DevOps 配置领域:Kubernetes 清单、Helm chart、GitHub Actions 工作流、GitLab CI 流水线、Docker Compose、Ansible playbook,以及几乎所有现代基础设施即代码工具。JSON 语法严格,对机器更友好,主宰着 API、应用配置、日志和服务间消息。当你需要把这两个世界粘合起来——例如把 Helm 的 values.yaml 喂给 Terraform 变量、或把 Kubernetes 清单导入只支持 JSON 的策略引擎——就需要一个快速、无损、保留类型的转换器。 DevFormatLab 的 YAML 转换工具在浏览器里完成四向翻译:YAML → JSON、JSON → YAML、YAML → Java .properties(带点路径扁平化与 [n] 数组下标)、.properties → YAML(处理 \uXXXX、\n、\t 转义以及反斜杠续行)。解析器遵循 YAML 1.2,因此 YAML 1.1 那种把 yes / no / on / off 自动当作布尔值的坑不会再咬到你——它们会按你写的字符串保留下来。数值、布尔、null 在往返中保持类型;anchor 与 alias 会被解析为最终值,输出一个自包含的 JSON;用 --- 分隔的多文档 YAML 会转换为 JSON 数组,让你把整份 kubectl apply -f 载荷喂给只支持 JSON 的流水线。严格校验会指出缩进或语法错误的精确行号,往往是 30 秒解决问题与一下午盲目排查的区别。所有处理都在本地完成——不上传,生产配置和带密钥的清单都可以放心用。

功能特性

  • YAML → JSON 转换并保留类型(数字、布尔、null)
  • JSON → YAML 转换并采用 2 空格缩进
  • YAML → Java .properties(点路径扁平化,数组用 [n])
  • .properties → YAML(处理 \uXXXX、\n、\t、反斜杠续行)
  • 遵循 YAML 1.2 —— yes / no / on / off 保留为字符串,不强转布尔
  • 多文档 YAML(--- 分隔)转换为 JSON 数组
  • anchor 与 alias 自动解析为自包含值
  • 严格校验,错误定位到具体行号
  • 100% 浏览器运行,不上传任何数据

使用步骤

  1. 在方向选择器里挑一个:YAML → JSON、JSON → YAML、YAML → Properties、Properties → YAML。
  2. 在左侧输入面板粘贴源内容,或点「Try sample」加载与当前方向对应的示例片段。
  3. 右侧立即显示转换结果。数值与布尔在 YAML / JSON 之间正确往返;得益于 YAML 1.2,yes / no / on 会保持为你写的字符串。
  4. 如果是 Kubernetes 清单或其他多文档 YAML,请把所有 --- 分隔符一起粘贴——每份文档会成为输出 JSON 数组的一项。
  5. 如果源内容有语法错误(Tab 与空格混用、缩进不一致、字符串没闭合),状态栏会显示精确行号,直接定位修复。
  6. 点「复制」或「下载」导出结果;用「Swap」翻转方向,在上一次的输出上再跑一遍。

常见问题

为什么出现「YAMLException: bad indentation of a mapping entry」?

YAML 用空格(绝不要用 Tab)缩进,同一层级的所有子键必须缩进一致。最常见的原因是 Tab 与空格混用或缩进差了一格: # 错误:第二个键少缩一个空格 server: host: example.com port: 8080 # 正确 server: host: example.com port: 8080 转换器会标出具体出错行号。请把编辑器设置为「插入空格」,并统一用 2 空格缩进。

为什么我的「yes」「no」「on」被转成 true / false 了?

YAML 1.1 把 yes/no/on/off 视为布尔(Ruby 和 PyYAML 用户尤其容易踩坑)。DevFormatLab 遵循 YAML 1.2,只有 true / false / null 是保留字,因此 feature: yes 会转成 {"feature": "yes"},而不是 {"feature": true}。 如果你需要布尔,请写 feature: true。如果确实需要字符串 "true",请加引号:flag: "true"。

如何转换多文档的 Kubernetes 清单?

把整个文件(含 --- 分隔符)一起粘贴。转换器会解析每个文档并输出 JSON 数组: apiVersion: v1 kind: ConfigMap --- apiVersion: v1 kind: Service 会变成: [ { "apiVersion": "v1", "kind": "ConfigMap" }, { "apiVersion": "v1", "kind": "Service" } ] 非常适合把 kubectl apply -f 的多文档载荷接入只支持 JSON 的流水线。

为什么 YAML → JSON 之后大整数精度丢失?

JSON 的 number 是 IEEE-754 双精度,超过 2^53(9 007 199 254 740 992)的整数会被静默四舍五入。Twitter snowflake ID、Kafka offset 都是常见受害者。 解决:把数字在 YAML 里加引号,保持为字符串: id: "1234567890123456789" 转换结果为 {"id": "1234567890123456789"},消费端再按需解析,可以保留完整精度。

如何把 YAML 转换为 Java .properties?

把方向选择器切到 YAML → Properties。嵌套对象会变成点路径,数组用 [0]、[1] 下标: # YAML spring: datasource: url: jdbc:mysql://localhost:3306/app profiles: - dev - test # .properties 输出 spring.datasource.url=jdbc:mysql://localhost:3306/app spring.profiles[0]=dev spring.profiles[1]=test Properties → YAML 反向亦支持,并且能正确还原 \uXXXX、\n、\t 转义与反斜杠续行。

YAML 的 anchor (&) 与 alias (*) 会被保留吗?

会被解析为最终值。例如: defaults: &defaults { retries: 3 } service: { <<: *defaults, name: api } 在 JSON 侧变成 {"defaults": {"retries": 3}, "service": {"retries": 3, "name": "api"}}。JSON 没有共享引用机制,这种展开是预期行为——你得到的是一份自包含的文档。

相关工具

Canonical: https://devformatlab.com/zh/yaml-converter