配置文件选型——为何要用YAML?

开宗明义: YAML是个好格式!程序员

做为配置文件,YAML应该是对人眼读取和编辑最友好的了,固然扩展性呢,就比JSON差了点,更不如XML,不过有舍有得么,通常状况下够用了。服务器

优势

直接上例子,看一下对比效果就知道了。测试

JSON

同一组配置,用JSON写是这个样子:code

{
  "id": 100,
  "name": "测试项目",
  "version": "3.1",
  "steps": [
    {
      "id": 18,
      "action": "Prepare",
      "expects": [
        {
          "id": 238,
          "result": "GOOD"
        },
        {
          "id": 239,
          "result": "PERFECT"
        }
      ]
    }
  ]
}

虽然格式化之后可读性也不错,但编辑起来就费劲了。这还仅仅是三层嵌套,括号对齐就有点吓人。xml

XML

若是用XML表示,会更加复杂,像下面这段,在没有语法高亮的状况下,读起来对人是一种折磨:对象

<?xml version="1.0" encoding="utf-8" ?>
<project>
    <id datatype="int">100</id>: 100
    <name datatype="string">测试项目</name>
    <version datatype="string">3.1</version>
    <steps>
        <step>
            <id datatype="int">18</id>,
            <action datatype="string">Prepare</action>,
            <expects>
                <step>
                    <id datatype="int">238</id>
                    <result datatype="ResultType">GOOD</result>
                </step>
                <step>
                    <id datatype="int">239</id>
                    <result datatype="ResultType">PERFECT</result>
                </step>
            </expects>
        </step>
    </steps>
</project>

要想手敲这段代码,更是容易出错:各类标签不封闭,嵌套层级混乱之类的。(想象一下远程登陆到服务器,用VIM或Nano打开它的样子)。utf-8

YAML

当YAML到来之后,世界一会儿清爽了:文档

id: 100
name: "测试项目"
version: "3.1"
steps:
  - id: 18
    action: "Prepare"
    expects:
      - id: 238,
        result: GOOD
      - id: 239,
        result: PERFECT

是否是无比简洁? 仅仅字符数,JSON就比YAML多了75%,XML更是多出320%!究其缘由,主要是YAML直接使用了对人眼友好的return和tab做为数据分隔符,这样一来,编辑起来简直跟Markdown文档差很少,堪称程序员福利啊。string

缺点

固然这世上没有银弹,YAML也有它固有的缺点。io

  • 首先开头提到过,它的扩展性差——这一点上XML优点明显,它每一个标签有attribute,能够任意定义“元数据”,好比示例中的datatype,这是YAML和JSON的共同弱项;若是实在须要,就只能把元数据也放在数据项中,而后用特殊的字符前缀来标识(相似Python对象中的__dict__)
  • 其次它对格式要求很严格,无法以“紧凑”形式表达:好比不须要人读的时候,咱们能够把JSON串压缩在一行,尽量去除全部空格,这个YAML显然作不到。
  • 还有就是各类语言中,对YAML的支持都还不够成熟,尤为是序列化/反序列化部分,现有的库都很不方便。

结论

若是没有强烈的第三方扩展性需求,YAML是配置文件的最佳选项。固然,为此付出的代价,就是一开始须要手写一点点序列化/反序列化代码。

相关文章
相关标签/搜索