使用方法
- 打开页面默认就带示例:文本框里是 { "db": { "host": "localhost", "port": 5432 }, "debug": true },结果区已经显示展平后的三行环境变量,你不需要先输入任何东西。
- 把你的 JSON 粘进文本框,支持多层嵌套对象,也支持数组,键名会被自动连接并大写。
- 在文本框里按 Ctrl 加回车(Mac 上是 Cmd 加回车)也能立即转换,不必点按钮;结果区是当场算出来的,不是固定文案。
- 点「转换」按钮,页面先把 JSON 解析,再按路径把每个叶子节点写成 KEY=VALUE;点「复制结果」复制全部行,点「下载 .env」导出为文本文件。
- 输入为空或不是合法 JSON 时,会点名当前字段提示你补全或修正,不会硬凑出一个空结果,避免你误以为转换成功。
- 本页不联网、不写本地存储,刷新即回到默认示例,所有转换都在你自己的浏览器里完成,输入内容不会离开设备。
这个 JSON转环境变量转换器 能解决什么
JSON转环境变量转换器 解决的是「配置从 JSON 搬到 .env 要手改」这个日常痛点。后端常把配置写成嵌套 JSON,而 Docker、CI、各种运行时却只认 KEY=VALUE 的扁平环境变量,手动把每一层键名拼成大写下划线,既慢又容易漏字段、拼错大小写。本工具一次把整棵 JSON 展平,复制即用。
第一类用途是容器与编排配置生成。写 docker-compose 或 Kubernetes 的 ConfigMap 时,常常要把一份 JSON 配置拆成几十个环境变量。本工具贴进去立即拿到全部 KEY=VALUE,挑出来填进文件即可,省去逐层抄写的繁琐。
第二类用途是本地开发与测试。本地起服务时,很多框架优先读取环境变量;当你从接口或配置中心拿到一份 JSON,粘贴进来就能得到对应的 env 片段,直接写进 .env 启动,不必再手动翻译结构。
第三类用途是团队协作时的配置对齐。多人维护配置,有人写 JSON、有人写 env,结构一变两边就对不齐。把 JSON 丢进来统一展平,能保证每个人拿到的键名规则完全一致,也便于 code review 时对照。
第四类用途是教学与记忆。很多人记不住「嵌套键要用下划线连接并大写」这条约定,把同一份 JSON 展平前后摆在一起,看一遍就记住规律,也方便整理成团队规范文档。
第五类用途是脚本与流水线的前置处理。在自动化里,先把配置 JSON 展平成 env,再注入进程环境,比临时写解析脚本更省心。理解这套「路径连接加大写」的方法论后,你也能把它迁移到自己脚本里。
第六类用途是接口联调时的字段核对。前后端约定配置字段时,常出现命名错位,把嵌套 JSON 展平后逐行比对,能快速发现哪一层键名被遗漏或拼错,减少低级联调错误。
第七类用途是文档与教程里的示例展示。写技术文档、录教学视频时,常常需要把同一份 JSON 同时展示原结构与展平结果,读者才能直观对比差异。本工具把两种形态并排输出,截图或复制都方便,省去逐一手动改写的琐碎。
值得一提的是,本页所有转换都在本地完成,不联网也不上传。你可以放心粘贴项目里的真实配置,结果不会被任何服务器记录,这点和需要登录的在线转换站不同,更适合处理私密配置。
原理和变量
JSON转环境变量转换器 的核心是「深度优先展平」,不含随机成分,因此同一段输入永远得到同一组输出,可被手算复核。算法从根对象出发,遇到对象就将其键名与当前前缀用下划线连接并转为大写,递归进入;遇到叶子值(字符串、数字、布尔、null)就写成「前缀=值」;遇到数组则把下标作为键名一部分继续展平。字符串值在 JSON 解析后已不带引号,所以输出里的值天然无引号;数字与布尔原样输出。
为什么要下划线连接并大写?因为这是环境变量的通行约定:PATH、DB_HOST 这类全大写下划线命名,既避免大小写歧义,也和 shell 变量规则一致。下面变量表说明各环节含义,方便你对照手算。
| 变量 | 含义 | 说明 |
|---|---|---|
| raw | 原始 JSON | 文本输入,解析为对象 |
| pre | 当前前缀 | 已连接的键名路径 |
| key | 叶子键 | 前缀_当前键,全大写 |
| val | 叶子值 | 字符串去引号,其余原样 |
| line | 输出行 | key=value 一行一条 |
完整示例
下面这组示例全部由页面算法原样得出,可直接对照你的手算。输入 { "db": { "host": "localhost", "port": 5432 }, "debug": true },从根出发:db 是对象,前缀变 DB,进入后 host 叶子得 DB_HOST=localhost,port 叶子得 DB_PORT=5432;debug 是根下布尔叶子得 DEBUG=true。与上方结果区、下方卡片和对照表完全自洽,全程无随机、可逐字复核。如果你把输入换成 { "a": { "b": { "c": 1 } } },会得到 A_B_C=1,展平规则始终不变,这正是路径连接加大写思路稳定可靠的体现。
如果你想验证手算,只要按深度优先把每一层键名用下划线拼起来并大写,再在末尾写上叶子值,必然和本工具一致。这个展平法也是你在不支持本页的环境里手动复现结果的可靠办法。
{ "db": { "host": "x" } }
DB_HOST=x
下划线连接+全大写
示例输入:{ "db": { "host": "localhost", "port": 5432 }, "debug": true }
DB_HOST=localhost
DB_PORT=5432
DEBUG=true
常见 JSON 与环境变量对照表
下表列出常见输入对应的展平结果(共 14 行),前 12 行直接展示,点「加载更多」展开剩余项。你可以一键导出 CSV(带 BOM,Excel 直接认中文)或复制 TSV 粘进表格软件。表里所有结果都由本页同一逻辑得出,无随机、可复核。
| 输入 JSON | 输出环境变量 |
|---|---|
| { "db": { "host": "localhost", "port": 5432 }, "debug": true } | DB_HOST=localhost DB_PORT=5432 DEBUG=true |
| { "redis": { "url": "127.0.0.1", "ttl": 30 } } | REDIS_URL=127.0.0.1 REDIS_TTL=30 |
| { "api": { "key": "abc", "secret": "xyz" } } | API_KEY=abc API_SECRET=xyz |
| { "log": { "level": "info", "file": "a.log" } } | LOG_LEVEL=info LOG_FILE=a.log |
| { "a": { "b": { "c": 1 } } } | A_B_C=1 |
| { "name": "app", "version": 2 } | NAME=app VERSION=2 |
| { "fe": { "port": 3000 }, "be": { "port": 8080 } } | FE_PORT=3000 BE_PORT=8080 |
| { "cache": { "enabled": false } } | CACHE_ENABLED=false |
| { "list": [ "x", "y" ] } | LIST_0=x LIST_1=y |
| { "mail": { "smtp": { "host": "h", "port": 25 } } } | MAIL_SMTP_HOST=h MAIL_SMTP_PORT=25 |
| { "auth": { "jwt": { "exp": 3600 } } } | AUTH_JWT_EXP=3600 |
| { "db": { "pool": { "min": 1, "max": 10 } } } | DB_POOL_MIN=1 DB_POOL_MAX=10 |
| { "oss": { "bucket": "b", "region": "r" } } | OSS_BUCKET=b OSS_REGION=r |
| { "queue": { "name": "q", "retry": 3 } } | QUEUE_NAME=q QUEUE_RETRY=3 |
结果边界与错误提示
- 输入为空时,提示「JSON 输入「」不合法:不能为空」,页面不会自作主张编出一个空串,避免你误以为转换成功。
- 输入不是合法 JSON(如少了括号或多了逗号)时,会提示「JSON 解析失败:<具体原因>」,并点名解析报错信息,方便你定位哪一行写错。
- 根节点不是对象(比如直接写了一个数组或数字)时,提示「JSON 不合法:根节点必须是对象」,因为展平目标是键值对。
- 键名会统一转为大写并下划线连接,若原 JSON 本身含下划线,结果仍是合法的大写下划线命名,不会出现双下划线。
- 数组会被按下标展平,例如 [ "x", "y" ] 得到 KEY_0=x、KEY_1=y,这是预期行为而非错误。
- 结果区与错误区都带 role="alert" 语义,内容一变就会被屏幕阅读器播报;所有转换本地完成,不联网也不写存储,刷新即还原默认示例。
- CSV 导出在文件头写入 UTF-8 BOM(\ufeff),Excel 打开中文不会乱码;TSV 复制是纯制表符分隔文本,粘进任意表格软件都会自动分列。
- 本工具只做结构展平,不对值做任何翻译或修改;若字符串里含有等号,会被原样写入,导入时需注意 shell 的转义规则。
常见问题
为什么键名要变成大写加下划线?
因为环境变量的通行约定是全大写下划线命名(如 DB_HOST),这样能避免大小写歧义,也与 shell 变量规则一致。本工具按此约定自动连接并大写,复制即可用。
嵌套对象是怎么展平的?
按深度优先递归:每层键名与当前前缀用下划线连接并大写,直到遇到叶子值才写出 KEY=VALUE。例如 { "a": { "b": 1 } } 得到 A_B=1,可逐字手算复核。
数组会被怎么处理?
数组按下标作为键名一部分继续展平,例如 { "list": [ "x", "y" ] } 得到 LIST_0=x、LIST_1=y。这样数组里的每个元素都能唯一对应一个环境变量。
字符串值的引号去哪了?
JSON 解析后字符串已经是不带引号的内容,输出时直接拼接,所以结果里的值天然没有引号。数字与布尔也原样输出,保持类型可读性。
我的配置会上传吗?
不会。所有 JSON 只在浏览器本地解析与展平,不联网、不写存储,刷新即还原默认示例,没有任何数据离开你的设备,可以放心粘贴项目真实配置。
导出的 CSV 为什么带 BOM?
因为 Excel 打开无 BOM 的 UTF-8 文件时常把中文显示成乱码,BOM 能让 Excel 正确识别编码。TSV 复制走剪贴板不经文件,所以不需要 BOM。
值和键名里能有特殊字符吗?
值会原样写入;若值含等号、空格或换行,本工具不做转义,导入 shell 时请自行加引号。键名只取字母数字下划线并大写,其余字符会被忽略以保证合法。
能批量处理很多份 JSON 吗?
本页一次处理一份 JSON。若需批量,逐份粘贴转换即可;理解「路径连接加大写」的方法论后,你也能把它写成脚本批量跑。
相关工具
- JSON 格式化工具:把压缩或错乱的 JSON 美化排版,和本工具同属 JSON 处理。
- CSV 转 JSON 转换器:表格数据转成 JSON 结构,方向相反可配合使用。
- JSON 校验工具:先校验 JSON 是否合法,再交给本工具展平更稳妥。