ENV

.env 与 JSON 双向转换

保留 dotenv 字符串,拒绝重复名称,可选展开 JSON 键并检查映射

数据格式
🔒 100% 本地运行 — 你的数据不会离开当前页面
由 Evan 维护•最近更新:2026年9月30日

dotenv 子集:名称限字母、数字、下划线且不能以数字开头;支持 export、注释和引号多行值。单引号按字面保留,双引号只展开 \n / \r(dotenv 17 规则;Node 内置解析器不展开 \r);第一个同类引号结束值,不支持转义引号。未加引号的 # 开始注释。不展开变量或执行命令。反向默认保留顶层名称,对象/数组写为 JSON 文本;无法无损表达的引号组合会报错。

输入 ≤2 MiB,输出和名称映射各 ≤8 MiB,深度 ≤128,值总数 ≤100000,键或生成路径 ≤8192 字符,数字文本 ≤256 字符。拒绝重复键、名称冲突、负零、非有限数、NUL 和未配对 Unicode 代理项。JSON 数字须能等值回写,整数限 ±9007199254740991。

配置在当前页面本地处理,不上传内容、不保存输入草稿;统计事件不包含键名、值或转换结果。复制或下载后,请按目标应用的实际配置规则复核。

工具说明

本工具实现明确的 dotenv 子集:可移植变量名、可选 export、注释和引号多行值。默认保留字符串,可选推断仅处理未加引号的严格 JSON 基础类型、数组和对象。单引号按字面保留,双引号仅按 dotenv 17 规则展开反斜杠 n 和 r;Node 内置读取器不会展开反斜杠 r。第一个同类引号结束值,因此不支持转义引号。引号输入中的物理 CR/CRLF 换行规范化为 LF。重复名称会报错。反向默认保留顶层名称,将嵌套值写为紧凑 JSON 文本;可选展开名称时会检查冲突并显示映射。无法保真输出的引号组合会报错。不会展开变量或执行命令,也不是 Shell 脚本生成器。转换在当前页面本地完成,不上传配置、不保存输入草稿,统计事件不包含键名和值。复制和下载包含当前完整结果,页面预览有长度上限。输入限 2 MiB、深度 128、值总数 100000、键或生成路径 8192 字符,输出和名称映射各限 8 MiB;数字类型文本限 256 字符。不支持 NUL 和未配对 Unicode 代理项。

场景配方

01

生成环境变量名并核对 Windows 路径

目标:展开嵌套连接配置,同时保留反斜杠路径并避免名称冲突。

  1. 选择 JSON → .env,输入 {"db":{"host":"localhost","port":5432},"path":"C:\\new\\test","empty":{}}。
  2. 开启展开并转换,在映射表中核对 DB_HOST、DB_PORT、PATH 和 EMPTY;PATH 应使用按字面处理的单引号。
  3. 增加顶层 db_host 字段并再次转换,确认出现冲突错误。明确删除或重命名冲突字段后再导出,并使用目标 dotenv 库读回核对。

结果:得到名称映射明确的环境配置:DB_PORT 是环境文本,Windows 路径保持不变,空对象也有明确值。

失败门诊(高频踩坑)

两个嵌套路径生成同一个环境变量名

原因:大写转换、符号替换和下划线拼接不可逆;a-b、a.b、a_b 与嵌套 a.b 都可能生成 A_B。

修复:已有合法顶层名称时关闭展开。确需展开时检查映射,在源数据中解决全部冲突,不能接受变量被覆盖。

带引号的值在另一个运行环境中读出不同结果

原因:dotenv 存在方言差异:dotenv 17 会解码双引号内的反斜杠 r,Node 内置读取器保留字面文本;转义同类引号与 Shell 展开规则也不一致。

修复:使用已声明的引号子集,Windows 路径使用字面单引号,并在实际应用的读取器中验证生成文本。表示错误说明输出器无法保留该组合,不要为转换成功而直接删掉反斜杠。

生产可用片段

展开结果保留反斜杠文本

text

JSON:
{"db":{"host":"localhost","port":5432},"path":"C:\\new\\test","empty":{}}

开启展开:
DB_HOST=localhost
DB_PORT=5432
PATH='C:\new\test'
EMPTY={}

普通 dotenv 读回:
{"DB_HOST":"localhost","DB_PORT":"5432","PATH":"C:\\new\\test","EMPTY":"{}"}

常见问题

接受哪些变量名和注释?

名称符合 [A-Za-z_][A-Za-z0-9_]*,可带 export 前缀。未加引号的 # 即使前面没有空格也开始注释;引号内 # 是文本。无效赋值、结束引号后的额外文本和重复名称会报错。__proto__ 作为自身数据保留,但部分下游读取器会省略它。

支持哪些引号、转义和多行值?

单引号按字面处理。双引号仅按 dotenv 17 规则展开反斜杠 n 和 r;Node 内置解析器展开反斜杠 n,但将反斜杠 r 保留为字面文本。物理 CR/CRLF 换行规范化为 LF。第一个同类引号结束值,不支持转义同类引号、通用反斜杠解码或框架专有引号扩展。

为什么数字和布尔值仍是字符串?

环境变量本来是文本,因此默认保留字符串。确需 JSON 类型时再启用推断:未加引号的 true/false/null、严格 JSON 数字、数组和对象会转换类型。引号值与 00123 保持字符串。推断时拒绝不安全整数、会改变的小数、负零和重复 JSON 键。

JSON 如何转换成 dotenv,展开后的名称会冲突吗?

JSON 根值必须是对象。默认保留合法顶层名称及大小写,数组和对象变成紧凑 JSON 文本。可选展开会规范化路径段、转大写并用下划线连接;a_b 与嵌套 a.b 等生成名称相同的情况会报错。空对象保持为 {} 值,映射表展示每个生成名称。

反向转换是通用 dotenv 或 Shell 序列化吗?

不是。输出器选择字面单引号或支持的双引号,不会悄悄改变文本;无法保留的组合会报错。回车使用反斜杠 r,dotenv 17 能解码,Node 内置解析器不能。普通 dotenv 读取后环境值仍为字符串。变量引用和类似命令的文本在本工具中是字面内容,不能假定 Shell 或展开插件会采用相同规则。

密钥会保存或上传吗,导出是否完整?

转换在当前页面本地完成,不上传配置、不保存输入草稿,统计事件不包含键名和值。复制和下载包含当前完整结果,页面预览有长度上限。输入限 2 MiB、深度 128、值总数 100000、键或生成路径 8192 字符,输出和名称映射各限 8 MiB;数字类型文本限 256 字符。不支持 NUL 和未配对 Unicode 代理项。

继续浏览