JSON / YAML / ENV 在线格式转换器
在 JSON、YAML、.env 三种配置格式之间互相转换。浏览器本地处理,支持语法校验、JSON 格式化与一键复制,适合后端、运维与 DevOps 配置迁移。
最后更新:
JSON、YAML、ENV 三种格式如何选择?
JSON 是由 RFC 8259 定义的纯数据交换格式:键必须用双引号、不支持注释、严格区分类型,是 HTTP API、前后端通信的事实标准。
YAML(YAML 1.2.2)以缩进表达层级,支持注释、引用与多文档,是 Kubernetes、CI 流水线、Ansible 配置的主流选择。
.env 不是任何标准定义的格式,而是一种约定俗成的扁平 KEY=VALUE 文本:每行一个变量、用大写下划线命名、没有嵌套,被 12-Factor App 推崇为应用配置与代码分离的最简形式。
JSON vs YAML vs ENV 特性对照
| 特性 | JSON | YAML | ENV (.env) |
|---|---|---|---|
| 规范 | RFC 8259 | YAML 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 问题:未加引号的
NO、YES、ON、OFF在 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 端使用逗号分隔再自行解析。
是否完全免费?需要注册吗?
完全免费、无广告、无需注册或登录,打开即用。