JSON / YAML / ENV 在线格式转换器

在 JSON、YAML、.env 三种配置格式之间互相转换。浏览器本地处理,支持语法校验、JSON 格式化与一键复制,适合后端、运维与 DevOps 配置迁移。

最后更新:

JSON、YAML、ENV 三种格式如何选择?

JSON 是由 RFC 8259 定义的纯数据交换格式:键必须用双引号、不支持注释、严格区分类型,是 HTTP API、前后端通信的事实标准。

YAMLYAML 1.2.2)以缩进表达层级,支持注释、引用与多文档,是 Kubernetes、CI 流水线、Ansible 配置的主流选择。

.env 不是任何标准定义的格式,而是一种约定俗成的扁平 KEY=VALUE 文本:每行一个变量、用大写下划线命名、没有嵌套,被 12-Factor App 推崇为应用配置与代码分离的最简形式。

JSON vs YAML vs ENV 特性对照

特性JSONYAMLENV (.env)
规范RFC 8259YAML 1.2.2无正式规范(dotenv / 12-Factor 约定)
嵌套原生对象 + 数组缩进表达层级仅扁平 KEY=VALUE
注释不支持# 行注释# 行注释
类型string / number / bool / null / array / object同 JSON,外加日期、二进制、自定义 tag全部字符串(由消费方解释)
字符串引号必须双引号单引号 / 双引号 / 无引号都行含空格或特殊字符时用双引号
尾随逗号禁止(JSON5 例外)不适用不适用
多文档不支持--- 分隔多文档不支持
典型场景HTTP API、前后端数据交换Kubernetes、Ansible、CI/CD、Docker Compose本地开发、12-Factor 应用配置、Shell

本工具的转换规则与边界

  • JSON → YAML:嵌套对象转为缩进结构,数组用 - 列表展开,键序保持稳定。
  • JSON / YAML → ENV:嵌套键按 PARENT_CHILD 大写下划线拼接,例如 database.host 输出为 DATABASE_HOST
  • ENV → JSON / YAML:解析为扁平键值对;含空格的字符串自动加双引号;数字与布尔字面量识别为对应类型。
  • 注释:以 # 开头的行会被忽略,不会保留到目标格式中。如果您需要保留注释,请在转换后手动复制。
  • 不支持的高级 YAML 特性:锚点(& / *)、自定义 tag(如 !!binary)、流式风格(flow style)暂未支持;遇到时会按字符串处理。
  • ENV 不支持数组:转换为 ENV 时数组会被忽略;建议在源端先拍平为逗号分隔字符串。

典型转换示例

JSON → YAML(Kubernetes ConfigMap 数据段)

{
  "log": { "level": "info", "json": true },
  "redis": { "host": "redis", "port": 6379 }
}
log:
  level: info
  json: true
redis:
  host: redis
  port: 6379

YAML → ENV(迁移到 12-Factor 本地配置)

database:
  host: localhost
  port: 5432
api:
  key: my-key
  timeout: 3000
DATABASE_HOST=localhost
DATABASE_PORT=5432
API_KEY=my-key
API_TIMEOUT=3000

配置迁移中的常见坑

  • YAML 的 Norway 问题:未加引号的 NOYESONOFF 在 YAML 1.1 会被解析为布尔。YAML 1.2 已收紧,但很多旧解析器(如 PyYAML 默认)仍然按 1.1 处理 —— 把国家代码 NO(挪威)写成布尔 false 是经典事故。
  • 八进制数字:以 0 开头的数字在 YAML 1.1 被当作八进制。port: 022 实际是 18 而不是 22。
  • 浮点精度:JSON 数字按 IEEE 754 双精度处理,超过 2^53 的整数会丢精度。订单号、雪花 ID 应使用字符串。
  • ENV 中的特殊字符:包含 $`\ 的值在某些 shell 中会被求值,建议用单引号或转义。
  • 键序丢失:JSON 和 YAML 规范都不保证键序;如果消费端依赖键序(如签名),请在源端排序。
  • 嵌套压扁的歧义{a: {b_c: 1}}{a_b: {c: 1}} 都会被压扁为 A_B_C=1,逆向无法还原原始嵌套结构。

延伸阅读与权威参考

常见问题

这个工具支持哪些格式互转?

支持 JSON、YAML、.env 三种常见配置格式之间的任意方向转换,并对输入做语法校验。

数据会上传到服务器吗?

不会。所有解析与生成都在浏览器内通过 JavaScript 完成,配置内容不会发送到任何服务器。

ENV 不支持嵌套,那怎么处理嵌套对象?

嵌套对象会按层级用下划线拼接键名,例如 database.host 会变成 DATABASE_HOST,方便直接粘贴到 .env 中。

支持数组吗?

YAML/JSON 之间的数组可以互转。ENV 本身没有数组语义,建议在 ENV 端使用逗号分隔再自行解析。

是否完全免费?需要注册吗?

完全免费、无广告、无需注册或登录,打开即用。