常用的配置文件格式

引入配置文件的原因是为了降低耦合、方便修改等。

  • 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
上次更新:
贡献者: chenzilin