常用配置文件
JSON
JSON是一种轻量级的数据交换格式,它基于JavaScript语言,但是它不是JavaScript语言。
JSON对象:键值对,用花括号括起来,键和值用冒号隔开,多个键值对用逗号隔开。
1
2
3
4
5
6
7
8
9
10{
"name": "myApp",
"version": 1.0,
"debug": true,
"database": {
"host": "localhost",
"port": 3306
},
"features": ["auth", "logging", "metrics"]
}
- 语法简洁,结构清晰方便解析
- 跨语言支持广泛,各种语言都有对应的库可以解析JSON数据
- 与XML相比,JSON更轻量,占用更少空间,传输更快
- JSON不支持注释
- JSON不支持对象继承
- 配置过大时可读性下降
- Web配置或前后端数据交换
- 需要语言跨兼容的配置文件
YAML
YAML是一种数据序列化格式,是一种可读性高的数据格式,但对缩进要求十分严格。
YAML对象:根据缩进来表示层级关系。键值对,用冒号隔开,冒号和值之间应当有一个空格。
- 语法简洁,结构清晰,缩进层次较小时能一眼看出
- 支持注释(
#开头)
- 缩进敏感,容易因缩进错误导致解析失败
- 不同解析器实现可能有差异
XML
- XML是一种可扩展标记语言,可以高效且精准的描述层次化结构。
- XML对象:用标签来表示数据的开始和结束,标签可以嵌套。
1 | <config> |
- 结构化数据表达能力强,支持层次、属性、命名空间
- 可扩展性好,支持自定义标签
- 支持模式约束,方便数据校验
- 语法较复杂,可读性差
- 文件体积大,传输速度慢
- 对手动编辑不友好
- 传统企业级项目(如 Java EE 配置、Spring XML)
- 需要严格数据校验的系统
- 文档型数据存储(Office 文档格式底层就是 XML)
INI
- INI是一种用于配置文件的格式,它基于键值对,用等号(
=)来分隔键和值。 - INI对象:使用方括号划分不同的区域名,区域内的键值对表示该区域的配置。并且可以在分号后编写单行注释。
1 | [app] |
- 语法简单,结构清晰
- 编辑方便,适合小型项目配置
- 支持分区,方便管理
- 数据类型有限(通常只能表示字符串,需要应用层解析)。
- 不支持复杂嵌套
- 没有严格标准,不同解析器可能有差异
- 小型应用、本地配置文件
- 桌面软件设置、轻量级服务配置
- 不需要复杂嵌套的场景
总结
| 格式 | 可读性 | 表达能力 | 解析性能 | 注释 | 常见场景 |
|---|---|---|---|---|---|
| JSON | 中等 | 中等 | 高 | 无 | Web API、微服务 |
| YAML | 高 | 高 | 中等 | 支持 | DevOps、K8s、CI/CD |
| XML | 低 | 很高 | 低 | 支持 | 企业级应用、模式验证 |
| INI | 高 | 低 | 高 | 部分 | 小型应用、本地配置 |
| 格式 | 可读性 | 文件体积 | 解析速度 | 跨平台兼容性 | 适用场景 |
|---|---|---|---|---|---|
| YAML | ★★★★☆ | 小 | 中等 | 较好 | 人工可读配置(如 CI/CD、游戏配置) |
| INI | ★★★★☆ | 很小 | 很快 | 一般 | 简单应用配置(桌面软件、老系统) |
| JSON | ★★★☆☆ | 小 | 很快 | 极佳 | 前后端通信、现代应用配置 |
| XML | ★★☆☆☆ | 大 | 慢 | 极佳 | 需要严格结构/文档描述(如 SOAP、旧系统) |
评论
