Skip to content

.env 转 JSON 转换器

粘贴 .env 文件,立即得到 JSON。数据库密码、API 密钥和令牌绝不离开你的浏览器 — 100% 本地、零上传、免费的 dotenv 解析器。

无追踪 浏览器中运行 免费
选项 · 2 空格 · 字符串
缩进
0 字符
JSON 输出
0
已针对 dotenv 解析兼容性、引号与转义处理及重复键行为审核 — Go Tools 工程团队 · 2026年6月12日

什么是 .env 文件?

一个 .env 文件(dotenv 文件)是一组纯文本的 KEY=VALUE 对,用来把配置和密钥保持在源代码之外。它是 Node.js、Vite、Next.js、Python、Ruby、Docker Compose 以及几乎每个现代框架中环境变量的事实标准 — dotenv 库及其移植版本会加载该文件并把每一对注入进程环境。由于该文件通常包含数据库密码、API 密钥、OAuth 客户端密钥和访问令牌,它几乎总是被 git 忽略并被当作敏感文件对待。

把 .env 文件转成 JSON 是一项常见任务:你需要把配置喂进一个读取 JSON 的工具、用 JSON Schema 校验它、导入密钥管理器、生成带类型的配置对象,或者只是把一个很长的 .env 作为结构化数据一目了然地查看。这个转换器把扁平的键值对列表变成一个 JSON 对象,每个键一个属性。

这个工具围绕几个深思熟虑的决策构建:

**1. 默认字符串,按需类型。** dotenv 从不强制类型转换 — 在运行时每个 process.env 值都是字符串。默认输出完全遵循这一点,所以 JSON 与你的应用实际看到的内容一致。当你想要带类型的 JSON 时,可选的「推断类型」开关会提升未加引号的数字、布尔值和 null 值,而加引号的值保持字符串,因为引号是一个明确的信号。

**2. 忠实的 dotenv 解析。** 注释、空行、export 前缀、单引号与双引号、转义序列、多行双引号值以及未加引号值上的行内注释,全都按 dotenv 库的方式处理 — 当你把 JSON 与应用加载的内容比对时不会有意外。

**3. 重复键安全。** 当一个键被定义两次时后面的值取胜,并有一条警告告诉你哪些键重复,使意外被遮蔽的密钥绝不会无声无息地溜过。

**4. 100% 基于浏览器的隐私。** 你的 .env 数据绝不离开浏览器。没有上传、没有服务器往返、没有日志记录 — 你可以在开发者工具的网络标签页中验证零网络请求。这是在线转换真实 .env 的唯一负责任方式,因为该文件本质上是一份凭据清单。

转换之后,你可以用 JSON 格式化 美化或校验结果,用 JSON 转义 将其转义以嵌入另一个字符串,或者用配套的 JSON 转 .env 转换器 反向操作。如果你的配置存放在 YAML 中,可以试试 YAML 转 JSON

// Parse a .env file to a JSON object in Node.js using dotenv
import { parse } from 'dotenv';

const envText = `# Database
DATABASE_URL=postgres://user:pass@localhost:5432/mydb
DEBUG=true`;

// dotenv.parse returns a plain object of string values
const parsed = parse(envText);

// Every value is a string, just like process.env
const json = JSON.stringify(parsed, null, 2);

console.log(json);
// {
//   "DATABASE_URL": "postgres://user:pass@localhost:5432/mydb",
//   "DEBUG": "true"
// }

核心功能

忠实的 dotenv 解析

处理注释、export 前缀、单引号与双引号、转义序列(\n \t \r \\ \")、多行双引号值和行内注释 — 完全按 dotenv 库的方式。

默认字符串,按需类型

值默认为 JSON 字符串以匹配 dotenv 的运行时行为。打开「推断类型」以提升未加引号的数字、布尔值和 null 值;加引号的值始终保持字符串。

重复键警告

如果一个键被定义两次,最后的值取胜(dotenv 行为),并有一条警告列出每个重复的键,使被悄悄覆盖的密钥不会无声溜过。

实时转换

JSON 输出会随你输入或粘贴而即时更新。大输入(超过 200KB)会自动切换到手动模式,带一个「转换」按钮以保持浏览器响应流畅。

缩进 2 或 4 空格

在 2 空格和 4 空格缩进之间切换 JSON 输出,以匹配你的代码库风格或下游工具。

100% 基于浏览器的隐私

所有解析都在你的浏览器中本地运行。你的 .env 数据 — 数据库密码、API 密钥、令牌 — 绝不会被上传、记录或存储在任何服务器上。

示例

Node / Vite 的 .env

# Database
DATABASE_URL=postgres://user:pass@localhost:5432/mydb
DATABASE_POOL_SIZE=10

# Auth
JWT_SECRET="super secret value"
SESSION_TIMEOUT=3600

# Feature flags
ENABLE_SIGNUP=true
VITE_API_BASE=https://api.example.com
{
  "DATABASE_URL": "postgres://user:pass@localhost:5432/mydb",
  "DATABASE_POOL_SIZE": "10",
  "JWT_SECRET": "super secret value",
  "SESSION_TIMEOUT": "3600",
  "ENABLE_SIGNUP": "true",
  "VITE_API_BASE": "https://api.example.com"
}

一个典型的 Node.js / Vite .env 文件。默认情况下每个值都会变成 JSON 字符串(dotenv 标准)。注释行和空行会被跳过。如果想让 10 → 数字、true → 布尔值,请打开「推断类型」。

Docker Compose 环境变量

POSTGRES_DB=mydb
POSTGRES_USER=admin
POSTGRES_PASSWORD=s3cr3t!
PGDATA=/var/lib/postgresql/data
TZ=UTC
NGINX_HOST=example.com
NGINX_PORT=80
{
  "POSTGRES_DB": "mydb",
  "POSTGRES_USER": "admin",
  "POSTGRES_PASSWORD": "s3cr3t!",
  "PGDATA": "/var/lib/postgresql/data",
  "TZ": "UTC",
  "NGINX_HOST": "example.com",
  "NGINX_PORT": "80"
}

把 Docker Compose 栈读取的 env_file 转成 JSON,方便加载进脚本、配置校验器或密钥管理器。任何内容都不会上传 — 真实凭据也可安全处理。

带 export 前缀的 CI 密钥模板

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_REGION=us-east-1
export DEPLOY_ENV=production
{
  "AWS_ACCESS_KEY_ID": "AKIAIOSFODNN7EXAMPLE",
  "AWS_SECRET_ACCESS_KEY": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
  "AWS_REGION": "us-east-1",
  "DEPLOY_ENV": "production"
}

Shell 风格的 .env 文件常在每行前加上 export 以便被 source。解析器会自动剥离 export 前缀,给你干净的 JSON 键。

复杂 .env:引号、转义、多行与行内注释

APP_NAME=My App                 # unquoted value, inline comment stripped
GREETING="Hello,\nWorld"        # double quotes: \n becomes a real newline
LITERAL='no \n escapes here'    # single quotes: kept literally
PRIVATE_KEY="-----BEGIN KEY-----
line two
line three
-----END KEY-----"
EMPTY=
{
  "APP_NAME": "My App",
  "GREETING": "Hello,\nWorld",
  "LITERAL": "no \\n escapes here",
  "PRIVATE_KEY": "-----BEGIN KEY-----\nline two\nline three\n-----END KEY-----",
  "EMPTY": ""
}

一次展示所有 dotenv 边界情况:未加引号值上的行内注释会被移除,双引号值会处理 \n \t \r \\ \" 转义,单引号值按字面保留,而双引号值可以跨多行直到结束引号(适合 PEM 密钥)。

使用方法

  1. 1

    粘贴你的 .env 文件

    在上方输入框中输入或粘贴你的 .env 内容。你也可以点击「加载示例」来试用 Node/Vite .env、Docker Compose env 文件或 CI 密钥模板。

  2. 2

    查看实时 JSON 输出

    JSON 会立即出现在输出面板中。如果你想要数字和布尔值而非字符串,切换「推断类型」,并选择 2 或 4 空格缩进。

  3. 3

    复制或下载

    点击「复制」把 JSON 复制到剪贴板,或点击「下载」保存为 .json 文件 — 可直接用于配置加载器、密钥管理器或任何读取 JSON 的工具。

常见 .env 陷阱

某一行缺少 = 号

每个非注释、非空行都必须是一个 KEY=VALUE 对。没有 = 号的行无法解析,工具会报告错误并给出行号。一个没有值的裸键应写成 KEY=(空值)。

✗ 错误
DATABASE_URL
DEBUG true
✓ 正确
DATABASE_URL=
DEBUG=true

= 号两侧有空格

dotenv 在第一个 = 处拆分,两侧不带空格。写成 KEY = value 会让键变成 'KEY '(带尾部空格)、值变成 ' value'(带前导空格)。请去掉空格,或者如果值必须包含前导空白则给值加引号。

✗ 错误
API_KEY = abc123
✓ 正确
API_KEY=abc123

未加引号的值被行内注释吃掉

在未加引号的值上,一个空格后跟 # 会开始一个行内注释,其后的一切都会被丢弃。如果你的值确实包含 #,请给值加引号以保留该 #。

✗ 错误
COLOR=#ff0000
✓ 正确
COLOR="#ff0000"

期望单引号中的转义生效

单引号值是字面的 — \n 仍然是一个反斜杠加一个 n,不会变成换行。当你想让 \n、\t 或 \" 这样的转义序列被处理时,请使用双引号。

✗ 错误
GREETING='Hello\nWorld'
✓ 正确
GREETING="Hello\nWorld"

多行值中未闭合的双引号

双引号值可以跨多行,但必须用一个匹配的双引号闭合。如果缺少结束引号,解析器会一直消费各行直到文件末尾。请确保像 PEM 密钥这样的多行密钥以一个结束引号收尾。

✗ 错误
KEY="-----BEGIN-----
line two
✓ 正确
KEY="-----BEGIN-----
line two
-----END-----"

重复键被悄悄覆盖

如果同一个键出现两次,最后的值取胜,前一个丢失。工具会警告你,但最干净的修复是移除重复项,使预期的值毫不含糊。

✗ 错误
PORT=3000
PORT=8080
✓ 正确
PORT=8080

常见使用场景

把配置喂进基于 JSON 的工具
把 .env 文件转成 JSON,将环境配置加载进读取 JSON 而非环境变量的工具、脚本和 SDK — 配置校验器、Schema 检查器和代码生成器。
把密钥导入管理器
许多密钥管理器(AWS Secrets Manager、Vault、Doppler)接受 JSON 进行批量导入。先把 .env 文件转成 JSON 对象,再一次性推送整组,而非逐个变量。
一目了然地查看长 .env
把一个庞杂的 .env 文件变成结构化、带缩进的 JSON,让你能扫视键、通过警告发现重复,并在提交更改前以可读格式审阅配置。
生成带类型的配置对象
启用「推断类型」以在 JSON 中获得数字、布尔值和 null,然后把它喂进带类型的配置层或一个 JSON 转 TypeScript 步骤,为你的环境变量推导出一个接口。
用 JSON Schema 校验
把 .env 转成 JSON 并通过 JSON Schema 校验器运行,在 CI 中强制必填键、值格式和允许的枚举 — 在部署前捕获配置错误的环境。
迁移 Docker Compose 的 env_file 配置
把 Compose 栈读取的 env_file 转成 JSON,用于另一个编排工具、配置服务器或文档 — 而不会把真实凭据暴露给任何外部服务。

技术细节

逐行的 dotenv 兼容解析
输入被逐行解析。空行和注释行(第一个非空白字符为 #)被跳过,可选的 export 前缀被移除,每个剩余行在第一个 = 处拆分为键和值。键会去除两侧空白。值遵循 dotenv 规则:双引号处理 \n \t \r \\ \" 转义并允许多行跨越,单引号是字面的,未加引号的值去除尾部空白和行内注释。
可选的类型推断
默认情况下所有值都作为 JSON 字符串输出,匹配 dotenv 的运行时行为 — 其中 process.env 的值始终是字符串。启用「推断类型」后,未加引号的值会被提升:数字字符串变成 JSON 数字,true/false 变成布尔值,空值或 null 变成 JSON null。加引号的值绝不会被推断 — 引号将它们标记为明确的字符串。重复键以「最后取胜」解析并附警告。
基于浏览器 — 无上传、无服务器
所有处理都完全在你浏览器的 JavaScript 引擎中进行;任何时候都不会有 .env 数据通过网络传输。没有外部依赖,因为解析器是自研的 — Node 的 dotenv 库依赖文件系统,对浏览器不安全。超过 200KB 的输入会从实时模式切换到手动模式(明确点击「转换」)以保持浏览器响应流畅。

最佳实践

保留默认字符串输出以匹配 dotenv
dotenv 把每个值都作为字符串加载,所以默认的字符串输出恰好反映你的应用在运行时所见。只有当下游消费者确实期望带类型的 JSON 时才启用「推断类型」 — 否则你会面临一种不匹配:'0' 或 'false' 在 JSON 中的行为与运行中的应用不同。
为含 # 或空白的值加引号
在未加引号的值上,一个空格后跟 # 会开始行内注释,且尾部空白会被去除。如果一个值确实包含 #(十六进制颜色、片段 URL)或有意义的空格,请用双引号包裹,使其在 JSON 中被原样保留。
在源头解决重复键
工具会保留最后的值并在键重复时警告你,但 .env 文件中的重复几乎总是错误。移除多余的行,使哪个密钥生效不再含糊。
绝不要把生产密钥粘贴到服务端转换器
由于 .env 文件实际上是一份凭据清单,只在完全运行于浏览器中的工具里转换它。这个转换器就是如此 — 在 DevTools 中验证零网络请求 — 所以它对真实密钥是安全的,不像服务端或 API 后端的转换器。
在下游使用前校验 JSON
转换之后,先用 JSON 格式化 运行 JSON 以确认结构,再把它喂进 Schema 校验器、密钥管理器导入或配置加载器,使结构上的意外尽早浮现。

常见问题

如何在线把 .env 文件转换成 JSON?
把 .env 文件的内容粘贴到上方的输入框。工具会在浏览器中立即将其解析为 JSON — 无需点击按钮。每个 KEY=VALUE 行都会变成一个 JSON 属性。你可以在「选项」面板中选择 2 或 4 空格缩进,然后点击「复制」获取 JSON 或「下载」保存为 .json 文件。一切都在本地运行,所以你的密钥绝不离开你的设备。
值会转换成数字和布尔值,还是保留为字符串?
默认情况下每个值都保留为字符串,完全符合 dotenv 标准。dotenv 本身从不强制类型转换 — process.env 的值始终是字符串 — 因此这个默认行为让 JSON 忠实于你的应用在运行时实际看到的内容。如果你更想要带类型的 JSON,请打开「推断类型」选项。启用后,看起来像数字的未加引号值会变成 JSON 数字,true 和 false 变成布尔值,空值或 null 变成 JSON null。即使开启了推断类型,加引号的值始终保留为字符串,因为引号是明确的字符串标记。
如果同一个键在我的 .env 文件中出现两次会怎样?
遵循 dotenv 行为,最后出现的取胜 — 后面的值覆盖前面的值。由于被悄悄丢弃的值是配置出错的常见来源,工具还会显示一条非阻塞警告,列出究竟哪些键重复了,方便你确认最终进入 JSON 的是哪个值。输出仍然是一个每键一条目的合法 JSON 对象。
引号、转义和多行值是如何处理的?
双引号值会处理转义序列:\n 变成换行,\t 变成制表符,\r 变成回车,\\ 变成反斜杠,\" 变成字面双引号。双引号值还可以跨多行直到结束引号 — 这对 PEM 私钥和证书很方便。单引号值按字面处理,不做任何转义处理,与 shell 一致。未加引号的值一直延伸到行尾,会去除尾部空白并剥离行内注释(一个空格后跟 # 表示注释开始)。这与 dotenv 库解析文件的方式一致。
这个解析器与 dotenv 库一致吗?
是的。解析规则遵循广泛使用的 dotenv 约定:# 注释行和空行被忽略,可选的 export 前缀被移除,键在第一个 = 处拆分,单引号按字面保留,双引号处理转义并允许多行值,未加引号的值去除两侧和尾部空白,且所有值默认为字符串。可选的「推断类型」开关是叠加其上的额外便利 — 它默认关闭,正是为了让输出与 dotenv 加载的内容一致。
它能处理嵌套或分组配置吗?
.env 文件刻意保持扁平 — 是一组键/值对,没有嵌套。这个转换器生成一个扁平的 JSON 对象,一对一地映射该结构。如果你的应用读取分组配置(例如 DB_HOST 和 DB_PORT),这些键在 JSON 中仍保持扁平;你可以之后在代码中重新整形。如果你需要真正的嵌套结构,YAML 转 JSON 这样的格式更合适,你还可以用 JSON 格式化 来美化结果。
我的 .env 数据会被发送到服务器吗?
不会。所有解析都完全在你的浏览器中通过 JavaScript 进行。你的 .env 内容 — 通常包含数据库密码、API 密钥、OAuth 密钥和访问令牌 — 绝不会被传输、绝不会存储在任何服务器上、也绝不会被记录。你可以打开浏览器的网络(Network)标签页,观察粘贴文件后触发零个请求来确认这一点。这正是它可以安全转换真实生产 .env 而不只是脱敏样本的原因。