JSON

Verne in GitHub

字号+ 作者:H5之家 来源:H5之家 2017-04-26 16:00 我要评论( )

YAML格式的文件在Jekyll的时候接触到,Jekyll的配置文件就是YAML。Jekyll本身由Ruby写成,而Ruby本身和YAML有着方方面面的联系,Ruby的配置文件约定是YAML。同时,YAML还是Ruby的文本序列化格式。 YAML是一个可读性高,用来表达资料序列的文件格式。YAML是”

YAML格式的文件在Jekyll的时候接触到,Jekyll的配置文件就是YAML。Jekyll本身由Ruby写成,而Ruby本身和YAML有着方方面面的联系,Ruby的配置文件约定是YAML。同时,YAML还是Ruby的文本序列化格式。

YAML是一个可读性高,用来表达资料序列的文件格式。YAML是”YAML Ain’t a Markup Language”(YAML不是一种标记语言)的缩写 。在开发的这种语言时,YAML 的意思其实是:”Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重新命名。

空格缩进和JSON选项

YAML文件格式主要集中于空格与缩进的概念,它用于指出数据的层次结构 – 而不是使用XML嵌套标记或JSON的大括号({})和方括号([]),实际上,它是JSON的一个超集,因此,在使用的时候,你可能需要采用JSON风格的语法来跳出空格流,它的创始人将其形容为“为所有编程语言提供人性化的数据序列化标准”,其重点是人性化。

世上有很多的数据结构,但是都可以归结到三种最基本的结构(primitives):mappings (hashes/dictionaries), sequences (arrays/lists) and scalars (strings/numbers). 有了这三种基本结构,绝大部分的编程语言都能够使用YAML了。

YAML 可以被用来作为:configuration files (配置文件), log files(日志文件),interprocess messaging(进程间通信),cross-language data sharing(跨语言数据交换),object persistence(对象持久化)和debugging of complex data structures(复杂数据结构的调试)。当数据能够容易的被读懂的时候,任何事情都会变得简单。

YAML 的目标

The design goals for YAML are, in decreasing priority:

YAML结构组件

YAML的结构:hash,list 和 block literal

YAML举例,一般扩展名为.yaml,也可以为.yml,比如:John.yml

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

语义介绍:John今年37岁,有一个幸福的四口之家。两个孩子Jimmy 和Jenny活泼可爱。妻子Jane年轻美貌。

值得注意的是字符串不一定需要双引号,当然如果强行添加双引号也可以。比如 "name: "John Smith" 同样也是可以的。

sequence

也可以叫做 list/array ,数组,列表,清单等等

使用-表示list

- Mark McGwire - Sammy Sosa - Ken Griffey

同样可以使用中括号来在行内表示:inline format, using [] ,

[Mark McGwire, Sammy Sosa, Ken Griffey]

二维数组,或者数组中包含数组可以写成

- [name , hr, avg ] - [Mark McGwire, 65, 0.278] - [Sammy Sosa , 63, 0.288]

map

或者叫做 hash/dictionary ,键值对,散列,哈希,字典等等。使用:表示,以:分割key:value

hr: 65 # Home runs avg: 0.278 # Batting average rbi: 147 # Runs Batted In

使用大括号来在行内表示inline format, using {} ,

hash中包含hash可以写成这样:

Mark McGwire: {hr: 65, avg: 0.278} Sammy Sosa: { hr: 63, avg: 0.288 }

散列的key值可以不为字符串,比如

0.25: a float key

key的值也可以多行,使用 ? 表示key 的开始:

? | This is a key that has multiple lines : and this is its value

list和hash相互包含

hash内包含数组:

american: - Boston Red Sox - Detroit Tigers - New York Yankees national: - New York Mets - Chicago Cubs - Atlanta Braves

数组内包含hash:

- # one hr name: Mark McGwire hr: 65 avg: 0.278 - name: Sammy Sosa hr: 63 avg: 0.288

block literal(文字块)

使用|表示文字块,YAML中字符串不需要包含在引号之内。

literal_block: | This entire block of text will be the value of the 'literal_block' key, with line breaks being preserved. The literal continues until de-dented, and the leading indentation is stripped. another_block: > This is another block of text

YAML VS XML & JSON

正如你从前面例子中清楚地看到那样,YAML没有XML那么啰嗦了,大部分YAML文件内容就是真实的数据,没有了无穷尽的打开和关闭标记列表,在XML中,这些标记往往比它们描述的数据还大,YAML更适合你需要手工维护的数据文件类型。

YAML没有提供方案或DTD概念,因此无法验证文件格式是否符合你的预期,XML的啰嗦也有它的价值,但总的说来是因为XML的成熟使它具有大量额外的工具来验证它的格式,而YAML还没有。

JSON也适合与任何数据,它主要面向提高性能和文件尺寸的大小,因为它几乎不使用空格和关闭标签,然而,JSON文件的内容增加了复杂性,它的关闭标识就象下地狱一样,这就是JavaFx代码(它基于JSON)中可见的最痛苦的了,在数据文件中,使用UI结构使结果更复杂,其复杂程度几乎使文件变得无法理解。

掺和了{}结构和[]清单,使得手工维护大型的JSON风格的文件变得相当困难,YAML使用它的空格缩进方法巧妙地解决了这个问题,当然,无论何时,你都可以切换到JSON风格的语法(如在底层节点)。

YAML Validation

作为一种格式,必然是人为规定,也必然存在格式检查工具,下面就是俩:

  • YAML lint
  • YAML online Parser
  • Wikipedia 

  •  

  • yaml spec 1.2 

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 软件开发外包中API设计学习之Github

      软件开发外包中API设计学习之Github

      2017-03-20 15:00

    • Harries Blog

      Harries Blog

      2016-05-21 10:00

    • .NET Core库迁移到GitHub的最新进展

      .NET Core库迁移到GitHub的最新进展

      2015-10-28 11:33

    网友点评