软件程序为了描述数据不遗余力有多重方式, 早期windows上有.ini文件, linux上有.conf文件. 后来.xml几乎成为了标配, 以及从.xml衍生的apple格式.plist.
xml衍生自html, 刚刚出来的时候大家都很兴奋, 确实在一段时间内几乎成为了一统江湖的格式. 然而xml与html不同的是, 在html中标签名称都比较简单短小, xml描述数据后key根据不同软件要求变得复杂, 前后一个括号将key写两遍变得很臃肿, key+value一共得占用三行,篇幅大阅读性也不够好.
后来json出来了, 大家就又松了口气, 舒服多了, key+value一行就够了, 写起来也舒服.
而现在yaml是要比json写更少内容的了. 甚至连大括号中括号都不用, 逗号也不用, 引号也不用, 所占用的行也没有了.

# 注释
name: John Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
    -   name: Jimmy Smith
        age: 15
    -   name: Jenny Smith
        age 12

从内容上看起来让人想到了python和markdown. 使用缩进, 描述语言更容易阅读. 上面这段包含了key value关系, 层次关系, 列表(数组)关系.
对比json:

  • 用缩进替代大括号表示层次关系, 这是python的手段;
  • 用回车替代逗号表示不同元素, 这也是python的手段
  • 继承了json使用冒号分隔key和value的方式
  • 用减号替代方括号表示列表, 这是markdown的方式
  • 注释使用井号#, 这是python的方式
  • 字符串断行使用反斜杠\, 这与js是相同的.
  • 最有趣的是, 如果你想在一行里面写多个元素, 你还可以使用js的[],{}语法
---
- [name        , hr, avg  ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa  , 63, 0.288]
---
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
    hr: 63,
    avg: 0.288
  }
  • 还有个比json强大的地方, 可以使用&定义常量并在后面使用星号*引用, 如
name: &JS Jhon Smith 
nameagain: *JS
  • 有一个现在不太明白怎么用的, 就是使用三减号---分隔不同文档,使用三点...终结文档. 这样可以在一个文档里描述多个文档, 干嘛用? spec里说用在通信频道上?不清楚列
  • 非常神奇的是, 可以使用一个复杂的对象作为key,而不是仅限于string, 这时候key需要以问号?开头
? - Detroit Tigers
  - Chicago cubs
:
  - 2001-07-23

? [ New York Yankees,
    Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
    2001-08-14 ]
  • 对于value的类型,常见的类型是自动判断的
number: 123
float: 123.13
string: something is something
string2: "123"
bool: true
canonical: 2001-12-15T02:59:43.1Z
iso8601: 2001-12-14t21:59:43.10-05:00
spaced: 2001-12-14 21:59:43.10 -5
date: 2002-12-14

  • 其他复杂的类型, 有些需要!!说明, 其他需要编程语言自己搞定. 通常是在key后面加叹号描述类型
---
not-date: !!str 2002-04-28

picture: !!binary |
 R0lGODlhDAAMAIQAAP//9/X
 17unp5WZmZgAAAOfn515eXv
 Pz7Y6OjuDg4J+fn5OTk6enp
 56enmleECcgggoBADs=

application specific tag: !something |
 The semantics of the tag
 above may be different for
 different documents.

# Sets are represented as a
# Mapping where each key is
# associated with a null value
--- !!set
? Mark McGwire
? Sammy Sosa
? Ken Griff

%TAG ! tag:clarkevans.com,2002:
--- !shape
  # Use the ! handle for presenting
  # tag:clarkevans.com,2002:circle
- !circle
  center: &ORIGIN {x: 73, y: 129}
  radius: 7
- !line
  start: *ORIGIN
  finish: { x: 89, y: 102 }
- !label
  start: *ORIGIN
  color: 0xFFEEBB
  text: Pretty vector drawing.

# Ordered maps are represented as
# A sequence of mappings, with
# each mapping having one key
--- !!omap
- Mark McGwire: 65
- Sammy Sosa: 63
- Ken Griffy: 58

标签: none 阅读量: 1302

添加新评论