JSON 转 Env 工具
把 JSON 对象转换成 .env 的 KEY=VALUE 格式,支持嵌套对象展平和注释回填,纯浏览器本地运行。
把 JSON 对象粘贴进来,就能得到 dotenv 这类加载器在程序启动时读取的 .env 变量行。嵌套对象会拼成 db.host 这样带点号的变量名,数组写成一行 JSON 文本,true、false 和数字直接写成纯文本;由 Env 转 JSON 生成的 $comments 映射,会重新变回每个变量上方的 # 注释行。转换全程在浏览器里进行,JSON 中的密钥不会离开你的设备。
关于 JSON 转 Env 工具
环境变量只能存放扁平的字符串,所以从 JSON 生成 .env,本质上是在决定每个变量叫什么名字。开启展平时,每一层嵌套路径都用分隔符连起来:{ "app": { "cache": { "ttl": 60 } } } 输出为 app.cache.ttl=60,键名的大小写与 JSON 里的写法完全一致,不会被自动改成大写。要留意的是,shell 无法把带点号的名字当作变量使用;如果这份文件要被 shell 脚本 source,请把分隔符改成下划线,得到 app_cache_ttl。关闭展平后,嵌套对象不再拆开,而是整个作为一行 JSON 文本写在等号后面。
你可能还需要
如何把 JSON 转换成 .env
- 1
放入一个 JSON 对象
输入框里需要的是对象,不能是数组或单独的值;也可以点烧瓶图标,载入一份只含 API 密钥和端口号的扁平示例。
- 2
决定变量名怎么拼
在高级选项里:保留点号,得到 db.host 这种 dotenv 风格的名字;换成下划线,得到 shell 也能识别的 db_host;或者关闭展平,让嵌套对象以 JSON 文本形式保留。
- 3
生成 NAME=value 行
点击「转换」后,每个叶子值各占一行,顺序与 JSON 中键的原始顺序一致;$comments 里的条目会以 # 行的形式紧贴在它所说明的变量上方。含换行、首尾空格或 # 的值会加上引号(换行写成 \n),转回 JSON 时能原样读出。
- 4
保存并管好这份文件
复制文本或下载为 .env 文件;里面若有凭据,别把它提交进版本库。想再解析回 JSON,点切换方向图标即可。
参考资料
- The Twelve-Factor App — Config
把配置存成环境变量这套方法论,也是本工具输出格式所遵循的规范。
- dotenv (motdotla) — README
.env 文件语法的参考实现,说明了 KEY=VALUE 键值对和注释的常规写法。
- RFC 8259 — The JSON Data Interchange Format
本工具解析的 JSON 输入格式所依据的 IETF 规范。
相关开发者工具
JSON 转 Env 常见问题
- 生成的变量名会自动变成大写吗?
- 不会。键名完全沿用 JSON 里的大小写,{ "db": { "host": "x" } } 输出的是 db.host=x。在 Linux 和 macOS 上,环境变量名是区分大小写的,所以请直接按应用读取时的大小写来写 JSON 的键。
- shell 脚本能直接 source 这份 .env 吗?
- 前提是每个变量名都是合法的 shell 标识符:只含字母、数字和下划线,并且不以数字开头。db.host 这类带点号的名字交给 Node.js 的 dotenv 加载没有问题,但 shell 不会把它识别为赋值语句。打算 source 的文件,请选用下划线分隔符。
- 数组会被拆成多个变量吗?
- 不会。开启展平时,嵌套对象会拆成若干个点号变量,而数组整体写成一行 JSON 文本,例如 tags=["a","b"]。关闭展平时,嵌套对象同样以 JSON 文本整体保留。
- 输出的变量顺序会被打乱吗?
- 不会。每个叶子值都会按它在 JSON 中出现的原始顺序,依次写成一行 NAME=value,所以生成的 .env 与原 JSON 对照着看很方便。
- true 和 8080 这样的值写进 .env 后还有类型吗?
- 没有。.env 文件本身不区分类型,true、false 和数字都按纯文本写出。用 Env 转 JSON 读回时,只要开启类型推断,它们就会重新变成真正的布尔值和数字。
- 原来的 # 注释能写回去吗?
- 可以。JSON 里如果带有 $comments 对象(比如 Env 转 JSON 的输出),每一条都会变成对应变量上方的 # 行。只想要干净的 NAME=value 行,就在高级选项里把「注释处理」设为「忽略」。
- 粘贴含 API 密钥的 JSON,会被上传吗?
- 不会。转换在你的浏览器本地完成。.env 文件里往往装着 API 密钥和数据库密码,这一点尤其重要。
- 为什么会提示变量名无效?
- 变量名为空,或含有空格、=、:、#、引号、反斜杠时,写进 .env 后就无法原样读回,所以转换会停下来并指出是哪个键,而不是写出一行坏数据。请在 JSON 里改掉这个键名;如果是分隔符带进了这个字符,就换一个分隔符。