易君召
发布于 2026-09-07 / 作者:易君召 / 6 阅读
0

常见配置文件格式对比与特点

主流:INI、JSON、YAML、TOML、XML、Properties、HCL,从可读性、注释支持、数据类型、嵌套、使用场景逐一说明。

1. INI(.ini)

[database]
host = 127.0.0.1
port = 3306
user = root
  • ✅ 特点:简单、分[section]分区,键值对,Windows 传统配置,解析轻量

  • ✅ 支持注释 ;

  • 不支持嵌套、数组、布尔原生类型,全部是字符串;不适合复杂结构

  • 适用:简单程序本地配置、旧版 Windows 软件

2. Properties(.properties Java)

properties

db.host=127.0.0.1
db.port=3306
  • ✅ Java 生态专用,#注释,扁平键值,极易解析

  • ❌ 无原生嵌套,靠.模拟层级;数组支持弱;只有字符串

  • 适用:Spring 老版本配置、国际化 i18n

3. JSON(.json)

json

{
  "database": {
    "host": "127.0.0.1",
    "port": 3306,
    "enable": true
  }
}
  • ✅ 标准通用,支持对象、数组、数字布尔;几乎所有语言原生解析;适合接口 + 配置

  • 不支持注释;手写容易逗号写错;长文件可读性差;尾部逗号部分解析器报错

  • 适用:API 交互、前端配置、程序输出;不适合人写长配置

变种:JSONC(带注释 JSON)VSCode、部分工具支持,但非标准。

4. YAML / YML(.yaml .yml)

yaml

database:
  host: 127.0.0.1
  port: 3306
  enable: true
  ips:
    - 192.168.1.1
    - 10.0.0.1
  • 缩进代表层级,人类可读性很强;支持注释#;完整类型:数字、布尔、数组、嵌套对象、多行字符串;K8s、Docker Compose 主流

  • ⚠️ 坑点:严格依赖空格缩进,不能 tab;格式错很难排查;部分类型歧义(yes/no 会解析为布尔);大文件解析性能一般

  • 适用:K8s、CI/CD、微服务、DevOps 工具配置;人手工编辑

5. TOML(.toml)

toml

[database]
host = "127.0.0.1"
port = 3306
enable = true
ips = ["192.168.1.1", "10.0.0.1"]

出自 Rust 生态,Cargo 默认配置

  • ✅ 结合 INI 分区 + JSON 数据能力;支持注释#;类型清晰,无 YAML 缩进坑;数组、嵌套表;语法明确没有歧义

  • ❌ 深层嵌套写起来繁琐;没有 YAML 那么简洁;普及度低于 YAML

  • 适用:Rust、Go 项目配置;Cargo、Poetry;需要机器解析 + 人阅读兼顾

6. XML(.xml)

xml

<database>
    <host>127.0.0.1</host>
    <port>3306</port>
</database>
  • ✅ 强大 schema 校验;注释;历史企业标准

  • ❌ 标签冗余,非常啰嗦;手写痛苦;现代新项目很少用来做应用配置

  • 适用:老 Java 框架、SOAP 接口、文档描述;不推荐做应用配置

7. HCL(HashiCorp Configuration Language,.hcl)

Terraform 使用

hcl

database {
  host = "127.0.0.1"
  port = 3306
}
  • ✅ HashiCorp 专属,支持注释;支持变量、表达式、块结构;不是纯静态配置,可以写逻辑

  • ❌ 生态绑定 Terraform/Vault,通用性差,其他语言解析库少

  • 适用:IaC 基础设施即代码

横向对比表

格式

注释

嵌套

数组

原生类型

主要痛点

典型场景

INI

仅字符串

不能复杂结构

老旧本地配置

Properties

仅字符串

靠点号模拟层级

Java 老项目 i18n

JSON

齐全

无注释,手写易错

接口数据输出

YAML

齐全

缩进敏感、类型歧义

K8s、docker-compose

TOML

齐全

深层嵌套繁琐

Rust/Go 项目

XML

标签极度啰嗦

遗留企业系统

HCL

通用性差

Terraform IaC

选型建议

  1. 机器交互,程序输出:优先 JSON

  2. DevOps,K8s,经常人手改配置:优先 YAML

  3. 后端项目,想要无缩进坑,兼顾读写:优先 TOML

  4. 简单少量 key,不需要复杂结构:INI / Properties

  5. 基础设施即代码:HCL(Terraform)

避坑提示

  • YAML 不要用 tab,统一 2 空格;避免 yes/no 这种容易被转 bool 的字符串

  • JSON 不要手写长配置,没有注释,维护难受

  • TOML 表嵌套,[[table]]数组表语法需要熟悉


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/common-config-file-formats-comparison-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/