主流: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 基础设施即代码

横向对比表
选型建议
机器交互,程序输出:优先 JSON
DevOps,K8s,经常人手改配置:优先 YAML
后端项目,想要无缩进坑,兼顾读写:优先 TOML
简单少量 key,不需要复杂结构:INI / Properties
基础设施即代码:HCL(Terraform)
避坑提示
YAML 不要用 tab,统一 2 空格;避免 yes/no 这种容易被转 bool 的字符串
JSON 不要手写长配置,没有注释,维护难受
TOML 表嵌套,
[[table]]数组表语法需要熟悉
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢