# 配置文件语义 Diff

比较 JSON、YAML、TOML 和 dotenv 配置，按键路径显示变化并忽略排序与格式噪声。

> 标准页面: https://elysiatools.com/zh/tools/config-file-semantic-diff

- **分类:** Development

- **关键词:** 配置 diff, 语义比较, YAML 比较, JSON 比较, TOML 比较, dotenv

## 概述

先把两份输入解析为值，再递归比较对象和数组，按路径标记新增、删除、修改或类型变化。数组保留顺序，因为顺序通常属于配置语义；dotenv 字面量会识别为数字、布尔值、null 或字符串，便于跨格式比较。

## 输入项

- **左侧配置** (textarea): { "server": { "port": 8080 } }
- **格式** (select)
- **右侧配置** (textarea): server: port: 9090
- **格式** (select)

## 适用场景

- 发布前检查两份服务器或部署配置的实际差异。
- 审计 dotenv 环境变量的新增、删除和修改。
- 比较不同格式的配置内容，避免被缩进、排序或格式噪声干扰。

## 工作原理

- 分别输入左侧和右侧配置文本，并可选择 JSON、YAML、TOML、dotenv 或自动检测格式。
- 工具先解析两份配置，再递归比较对象和数组中的值。
- 结果按键路径标记新增、删除、修改或类型变化。
- 对象键的顺序和格式差异会被忽略，但数组顺序会保留并参与比较。

## 使用案例

- 部署配置发布前的变更审查。
- 开发、测试和生产环境变量的差异核对。
- JSON、YAML 或 TOML 配置迁移后的语义验证。

## 常见问题

### 支持哪些配置格式？

支持 JSON、YAML、TOML 和 dotenv。格式可以手动选择，也可以使用自动检测。

### 对象键的顺序变化会被标记吗？

不会。工具按解析后的值比较对象，因此会忽略对象键的排序和格式差异。

### 数组顺序会参与比较吗？

会。数组保留顺序，因为数组顺序通常属于配置语义。

### Diff 结果会显示哪些变化？

结果会按路径显示新增、删除、修改和类型变化。

### dotenv 中的数字和布尔值如何处理？

dotenv 字面量会识别为数字、布尔值、null 或字符串，便于与其他格式进行比较。

## 相关工具

- [环境配置差异可视化器](https://elysiatools.com/zh/tools/environment-config-diff-visualizer): 对 JSON、YAML、TOML 与 ENV 配置进行跨环境对比，高亮漂移项、缺失项，并给出清洗建议。
- [JSONata 查询转换工作室](https://elysiatools.com/zh/tools/jsonata-query-transform-studio): 预览 JSONata 风格查询与转换，支持多数据对比，并导出 JSON、CSV、YAML 或 Markdown。
- [TOML / INI / HCL / .env / Nix / dotenv / Kubernetes ConfigMap / Secret 配置格式桥](https://elysiatools.com/zh/tools/toml-ini-hcl-envfile-nix-dotenv-kubernetes-configmap-secret-config-format-bridge): 在 dotenv .env、TOML、INI、Java .properties、YAML、JSON、HCL（Terraform/Vagrant 原生语法）与 Nix 属性集之间转换配置，并可输出 Kubernetes ConfigMap / Secret 清单；保留 ${VAR} / {{var}} 模板占位符与 envsubst 风格插值、记录类型推断来源（string/int/float/bool/list）、HCL 块标签自动折叠为嵌套键，往返 diff 突出非等价设置（丢失键、类型变化、值改写），输出对 Kustomize 补丁友好的 YAML。
- [OpenAPI 转 Postman Collection](https://elysiatools.com/zh/tools/openapi-to-postman-collection): 把 OpenAPI 3.x 或 Swagger 2.0 规范（JSON/YAML）转成可直接导入的 Postman Collection v2.1.0，含文件夹、变量、认证与示例响应。
- [YAML-JSON转换器](https://elysiatools.com/zh/tools/yaml-json-converter): 在YAML和JSON格式之间转换
- [JSON Schema 转 Zod Schema 转换器](https://elysiatools.com/zh/tools/json-schema-to-zod-schema-converter): 将标准 JSON Schema 的 JSON/YAML 定义转换为可直接在 TypeScript 项目中使用的 Zod 运行时校验代码，支持嵌套结构、数组、枚举和常见校验规则
- [OpenAPI 转 TypeScript 类型生成器](https://elysiatools.com/zh/tools/openapi-to-typescript-generator): 将 OpenAPI 或 Swagger 的 JSON/YAML 规范转换为 TypeScript 接口类型、请求参数类型和响应类型，并支持输出格式与命名风格配置
- [WireGuard/OpenVPN 到 Clash 与 sing-box 配置桥接器](https://elysiatools.com/zh/tools/wireguard-openvpn-to-clash-singbox-bridge): 将粘贴的 WireGuard 或 OpenVPN 客户端文本转换为 Mihomo/Clash YAML 或 sing-box JSON，并报告密钥字段；请勿分享私钥

## 示例

- [OpenAPI/Swagger 示例](https://elysiatools.com/zh/samples/openapi-swagger): 使用 OpenAPI 3.0 和 Swagger 规范的 RESTful 服务综合 API 文档示例
- [Parcel 打包工具](https://elysiatools.com/zh/samples/parcel): Parcel零配置打包工具示例，包括项目设置、插件和高级配置
- [分布式追踪示例](https://elysiatools.com/zh/samples/distributed-tracing-samples): 使用 Jaeger、OpenTelemetry 和其他现代可观测性工具的综合分布式追踪示例，适用于微服务架构
- [pnpm 包管理器示例](https://elysiatools.com/zh/samples/pnpm): 快速、节省磁盘空间的包管理器示例，包括monorepo管理、工作区配置和高级工作流
