跳到主要内容

.env 转 JSON 完全指南:环境变量怎么变成键值对象

讲清楚怎么把 .env 文件转成 JSON,KEY=VALUE 如何对应到对象键值,引号、注释、export 前缀怎么处理,以及为什么本地转换密钥不会上传,适合配置导入和 CI 场景。

发布于 作者 李雷
#env #json #环境变量 #dotenv #配置

.env 转 JSON 完全指南:环境变量怎么变成键值对象

.env 文件几乎是每个项目的标配,一行一个 KEY=VALUE,Node、Python、Docker、CI 都认它。但很多时候你手里需要的不是这种纯文本,而是一个 JSON 对象:老服务只读 config.json、前端构建要注入一份配置、测试夹具要直接 import。这篇就讲清楚 .env 和 JSON 之间到底怎么互转,以及那些容易把简单分割逻辑搞崩的细节。

KEY=VALUE 怎么对应成 JSON 键值对

最核心的规则一句话:每一行 KEY=VALUE,等号左边变成 JSON 对象的键,右边变成对应的值。一个常见的误区是用 split("=") 粗暴切分,这在值本身带等号时立刻翻车。正确做法是只用一行里的第一个 = 切分键和值,后面的等号统统算进值里。

举个真实例子,下面这段 .env:

# 数据库
export DATABASE_URL=postgres://app:pw@db:5432/api?sslmode=require
PORT=3000 # http 端口
APP_NAME="My App"
TOKEN=ab=cd=ef

转成 JSON 后是这样:

{
  "DATABASE_URL": "postgres://app:pw@db:5432/api?sslmode=require",
  "PORT": "3000",
  "APP_NAME": "My App",
  "TOKEN": "ab=cd=ef"
}

注意几个点:整行 # 注释和空行被丢掉;连接串里的 ?sslmode=require 那个等号完整保留;TOKEN 的值 ab=cd=ef 没有被第二个等号切断。这些就是手写正则最容易漏掉的地方。

引号、注释和 export 前缀的处理

真实世界的 .env 远比"一行一对"复杂,这几类写法必须正确识别:

  • export 前缀:export API_KEY=abcAPI_KEY=abc 解析结果应当一样,前缀去掉即可,这样从 shell 脚本里直接复制过来的行也能用。
  • 双引号与单引号:双引号的值会展开转义,GREETING="hi\nthere" 应当变成一个两行的字符串;单引号按字面处理,不展开转义。
  • 行内注释:# 当注释的前提是它前面有空格。所以 PORT=3000 # http 端口 得到 3000,而 COLOR=#ff0000 会保留完整的十六进制值,因为 # 前面没空格。引号里的 # 永远不当注释。

这套规则不是我随手定的,它和 Node 的 dotenv、Bash 读取环境文件的行为是对齐的。如果你只是想先确认一个 .env 写得合不合法、有没有重复键或可疑引号,可以先用 dotenv 校验工具 过一遍,再做转换。

类型要不要推断

.env 里所有值天生都是字符串,这正是运行时 process.env 的真实行为。但 JSON 的消费方往往希望 PORT 是数字、DEBUG 是布尔。这时候类型推断就有用了:打开它,PORT=3000 变成数字 3000,DEBUG=true 变成布尔 true

但要保守。像 01234 这种带前导零的账号 ID、08 这种编码,绝不能被转成数字,否则前导零丢了,值就错了。所以一个靠谱的转换器会把这类带前导零的字符串原样留作文本。要不要开类型推断,取决于下游:数值断言、计算端口偏移这类场景开;要求每个值都是字符串就关。

配置导入、前端注入与 CI 场景

我自己最常用到这个转换是在接手老服务的时候。有次团队其它部分都统一用 .env 了,只剩一个老应用还读扁平的 config.json,三十多个键。我没有一个一个手敲,而是把 .env 粘进去、复制出 JSON,直接塞进老应用,连接串里的等号和带空格的多词值原样过来,后面再没追查过坏掉的 DATABASE_URL

常见的几类用途:

  • 配置导入:把 .env 转成 JSON 喂给只认 config.json 的应用,省掉手敲。
  • 前端注入:构建阶段把一份环境配置序列化成 JSON 注入页面或打进 bundle。
  • CI 变量:仪表盘或 CI 系统把配置给你一坨 JSON,反过来切到 JSON 转 .env,就能拿到引号处理正确的 KEY=value,带空格的值自动加引号,数字保持裸数字,粘进 .env 就能发。

需要注意的是,.env 只有扁平的 key=value,嵌套的对象和数组会被序列化成一个加引号的值,不会被展开,所以从 JSON 转回 .env 前最好先把结构拍平。

本地转换:密钥不上传这件事很重要

.env 几乎总是装着真凭据:数据库密码、API key、token。把这种文件粘到一个会上传到服务器的在线工具里,本身就是一次泄露。所以转换这一步必须 100% 在浏览器本地完成,解析、展开转义、推断类型、拍回 dotenv,全是浏览器标签页里运行的纯 JavaScript,文件和密钥都不上传也不记录。

唯一要留心的是分享链接:它会把输入写进查询字符串,粘到聊天里对方服务器的访问日志会留下这段文本。所以涉及真凭据时,用复制按钮粘贴文本,别分享网址,更不要把真实 API key 放进公开链接。

想直接动手转,打开 .env 转 JSON 转换器 把文件粘进去就行;如果你要的是把 .properties 配置转成 JSON,或者反过来格式化清洗一段 JSON,可以分别看 properties 转 JSONJSON 格式化工具


Made by Toolora · Updated 2026-06-13