常用的配置文件格式
引入配置文件的原因是为了降低耦合、方便修改等。
- Linux中.bashrc
- YAML
- TOML
- JSON
- XML
- INI
- CSON
XML:濒临淘汰
XML 语言非常灵活且易于编写,但它的缺点是冗长,人类难以阅读、计算机非常难以读取,并且有很多语法对于传达信息并不是完全必要的。
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
JSON(JavaScript对象表示法)
JavaScript 对象表示法(JavaScript Object Notation),简称 JSON。JSON是一种轻量级的数据交换格式。由于JavaScript和大多数Serverside语言本身支持JSON,因此JSON广泛用于Web环境中浏览器和服务器之间的API通信。
JSON允许深层嵌套数据,支持所有的原始数据类型,及将集合解释为数组或对象。
- 数据存储在名称/值对中。
- 记录用逗号分隔。不允许没有以下属性的尾随逗号。
- 双引号包装属性名称和字符串。不允许单引号。
缺点:
- JSON不支持多行字符串
- 不支持注释
{
"date" : "2016-12-14T21:27:05.454Z",
"publishdate" : "2016-12-14T21:27:05.454Z",
"title" : "Deep dive into TOML, JSON and YAML",
"tags" : ["toml","yaml","json", "front matter"],
"type" : "article",
"amp" : {
"elements" : []
},
"article" : {
"lead" : "Lorem ipsum.",
"category" : "frontmatter",
"related" : []
},
"sitemap" : {
"changefreq" : "monthly",
"priority" : 0.5,
"filename" : "sitemap.xml"
}
}
INI
ini 格式是用得非常多的配置文件格式,有大量的项目都使用 ini 编写配置文件,它比较适合配置项的数据类型只是简单的字符串、数字的情况,如果涉及数组和 key/value 的嵌套,会比较吃力。
[database]
user = dbuser
password = dbpassword
database = use_this_database
[paths.default]
datadir = /var/lib/data
array[] = first value
array[] = second value
array[] = third value
TOML
TOML( Tom 的显而易见的最小化语言(Tom’s Obvious, Minimal Language))允许以相当快捷、简洁的方式定义深层嵌套的数据结构。
- TOML文件只能包含UTF-8编码的Unicode字符。
- 空格表示制表符(0x09)或空格(0x20)。
- 换行符表示LF(0x0A)或CRLF(0x0D0A)。
- TOML 的写法和 ini 几乎一致,切换成本为 0
[[books]]
id = 'bk101'
author = 'Crockford, Douglas'
title = 'JavaScript: The Good Parts'
genre = 'Computer'
price = 29.99
publish_date = 2008-05-01T00:00:00+00:00
description = 'Unearthing the Excellence in JavaScript'
TOML 中集成了一些很棒的功能,例如多行字符串、保留字符的自动转义、日期、时间、整数、浮点数、科学记数法和“表扩展”等数据类型。
使用 TOML,你可以肯定在时间和文件长度上会节省不少。很少有系统使用它或非常类似的东西作为配置,这是它最大的缺点。根本没有很多语言或库可以用来解释 TOML。
YAML
几乎所有 web 编程语言都可用的解析器,它还有一些额外的功能,如循环引用、软包装、多行键、类型转换标签、二进制数据、对象合并和集合映射。它具有非常好的可读性和可写性,并且是 JSON 的超集,因此你可以在 YAML 中使用完全合格的 JSON 语法并且一切正常工作。
- 键值对由冒号分隔
- 列表以连字符开头
- YAML使用具有一个或多个空格的缩进来描述嵌套集合
缺点:
- YAML 解析器尚未内置于多种语言,因此你需要使用第三方库或扩展来为你选择的语言解析 .yaml 文件
- 很少有解析器完全实现规范
# 我是一个注释
books:
- id: bk102
author: Crockford, Douglas
title: 'JavaScript: The Good Parts'
genre: Computer
price: 29.99
publish_date: !!str 2008-05-01
description: Unearthing the Excellence in JavaScript