JSON和YAML是两种流行的格式,用于不同应用程序和语言之间的数据交换,也被称为数据序列化。
它们在功能和特点上是相似的:它们表示数据对象和结构,使用简单的语法,便于阅读和编辑。
但设计上的差异影响了它们的使用范围。这篇关于YAML和JSON的概述将展示它们的主要特点并对它们进行比较,以帮助你为你的项目做出正确的选择。
目录
什么是JSON
➤JSON历史
➤ 技术规格
➤ JSON使用的数据类型
➤ 语法
➤JSON示例
➤ JSON 的优点
➤ JSON的缺点
什么是YAML
➤ YAM L历史
➤技术规格
➤数据类型
➤语法
➤YAML示例
➤ YAML 的优点
➤ YAML的缺点
JSON和YAML的区别
YAML和JSON:哪个更好?
什么是 JSON
JSON是指JavaScript对象符号。正如你可能从名字中猜到的那样,JSON 源自 JavaScript 数据格式。它是一种开放标准、轻量级、基于文本的格式,数据类型有限。它简短的语法和简单的结构使它非常容易阅读。
它被用来向服务器发送数据,以及从服务器向客户端发送数据,就像一个信封,数据被包裹在其中,在通信者之间来回发送。
它受到程序员的高度赞赏,他们在移动应用程序、MongoDB或Kubernetes等数据库服务和用户互动中使用它,是XML的一个更友好的替代品。JSON提供的简单性和处理速度,以及它与任何系统的高兼容性,使它成为当今最流行的格式之一。
JSON的历史
根据JSON的开发者Douglas Crockford的说法,1996年网景公司就已经在使用相同原理的语言了,但JSON在2001年才作为一种成熟的语法成为主流。
它是Android技术、REST-API或任何将数据从服务器发送到网页的情况下的首选资源。它是独立于语言的,这意味着它可以与任何编程语言一起使用。而我们在线体验的很大一部分都依赖于它。
技术规格
JSON文件的决定性特征是什么?JSON文件的扩展名被定义为.json。它使用通用数据结构和有限的数据类型选择。它的简单语法使用了C-家族语言的程序员所熟悉的惯例,如C、C++、C#、Java、JavaScript、Perl、Python等。正如JSON的官方网站所解释的。
"一个对象是一个无序的名/值对的集合。一个对象以**{左括号开始,以}右括号结束。每个名字后面都有:冒号**,名字/值对之间用**,逗号**分开。"
JSON使用的数据类型
- 字符串
- 数字
- 对象
- 数组
- 布尔值(真/假)
- 空值
语法
JSON的语法规则很简单:
- 根节点必须是一个数组或一个对象。
- 数据被指定为名/值对。
- 数据条目由逗号分隔。
- 对象被限制在大括号之间。
- 方括号容纳数组。
- 对象可以有数组对象来创建列表。
- 它在名字和值周围使用引号,用冒号分开。
JSON例子
让我们看一个JSON例子,使用一些关于著名重金属乐队Metallica的信息:
{
"bandName": "Metallica",
"genre": "Heavy Metal",
"active": "yes",
"bandMembers": {
"drums": "Lars Ulrich",
"guitarLead": "Kirk Hammet",
"guitarRythm": "James Hetfield",
"bass": "Cliff Burton"
},
"otherMembers": ["Jason Newsted",
"Robert Trujillo",
"Dave Mustaine",
"Ron McGovney"
],
"Discography" : [
{"name":"Kill ’Em All","year":"1983"},
{"name":"Ride the Lightning","year":"“1984"},
{"name":"Master of Puppets","year":"“1986"},
{"name":"..And Justice for All","year":"“1988"}
]
}
正如你所看到的,大括号限定了对象和数组。所有项目都有引号,属性名称和值用冒号分开。逗号用于分隔名称:值的配对。
列表是通过使用方括号定义的,其中的数组属性也用逗号隔开。
JSON的优点
- 其紧凑的语法使JSON非常便于人类阅读。
- 语法简单,标记有限。
- 被系统和语言快速解析。
- 它可以被大多数系统和语言所使用。
JSON的劣势
- 有限的数据类型:只接受字符串、数字、JSON对象、数组、布尔值和空。
- 不接受:命名空间、注释或属性。
- JSON的结构是为了简单,所以它可能不支持自己的复杂配置。
什么是YAML
YAML的意思是 "另一种标记语言",但这个意思变成了YAML Ain't Markup Language,以表达它对数据的关注超过对文档的关注。撇开缩写不谈,YAML是一种非常人可读的轻量级格式,通常用于存储DevOps工具的配置信息,如ElasticSearch、Docker、Kubernetes、Prometheus和Ansible。
就像它在官方网站上说的,也是用YAML格式写的:
"YAML是一种人类友好的数据序列化语言,适用于所有编程语言"。
它是一种数据序列化语言,但它也经常被用来编写配置文件。我们将通过数据序列化的棱镜来观察YAML。
YAML的历史
YAML在2001年首次被公开。YAML的创始者是IngydotNet、Clark Evans和Oren Ben-Kiki,他们共同致力于创造一种比XML更简单的格式。你可以从第一手资料的角度来阅读这个故事。 从那时起,它已经成为各地开发者的工作主力。
技术规格
YAML是以一种非常清晰的人类可读的格式编写的,它的额外优势是支持注释,使得它超级容易编辑。 因为它是JSON的超集,所以一个有效的YAML文件可以包含JSON对象。它适合于支持复杂的数据类型,能够包围多层次的对象。这使得它对某些技术的使用不那么友好。
数据类型
YAML接受与JSON相同的数据类型,主要区别在于支持日期属性的能力:
- 字符串
- 数字
- 布尔型
- 日期和时间戳
- 序列
- 嵌套值
- 空值
语法
大多数函数没有括号和引号,这使得阅读更加自然。即使是不熟悉的人也能迅速了解应该发生什么。YAML的语法是它的优势,但如果我们不注意缩进和空格的位置,也是验证问题的来源。
- 使用键值对,用冒号分隔。
- 弹簧不包含在括号中。
- 缩进是用来定义数据层次的。
- 列表以连字符开始。
- 允许在注释前面加上#。
- 属性前的空格很重要。
- 管状字符(|)允许多行字符串;"大于 "符号(>)允许将多行字符串作为单行阅读。
- YAML可以通过使用"&"来引用其他数据对象。
YAML示例
现在,看看我们上面用于JSON的相同数据在YAML格式中的样子:
bandName: Metallica
genre: Heavy Metal
active: 'yes'
bandMembers:
drums: Lars Ulrich
guitarLead: Kirk Hammet
guitarRythm: James Hetfield
bass: Cliff Burton
otherMembers:
- Jason Newsted
- Robert Trujillo
- Dave Mustaine
- Ron McGovney
Discography:
- name: Kill ’Em All
year: '1983'
- name: Ride the Lightning
year: “1984
- name: Master of Puppets
year: “1986
- name: ..And Justice for All
year: “1988
第一印象,YAML看起来比JSON好,因为它摆脱了所有的括号和引号。它读起来不太像代码,而更像一个大纲。
YAML的优点
- 非常简单的人类可读的语法。
- 紧凑的语法,使用Python风格的缩进来表示结构。
- 支持int、binary、str和bool等标度器,以及map、set、pair和seq等集合。
- YAML支持JSON所不支持的注释。只需在注释前添加一个#符号。
- 能够使用复杂的数据结构。
- 通过使用"&"符号,YAML可以重复使用块。这也是它被用来描述基础设施的原因之一,比如Kubernetes堆栈。JSON没有相应的操作。
YAML的劣势
- 不正确的缩进或间距容易产生验证错误。
- YAML的声明性使得调试更加困难:挪威的Alpha码(NO)可以被解释为一个布尔值。
- 没有断点。
JSON和YAML之间的区别
YAML和JSON是两种流行的语言,在结构和可用性方面很相似。它们在设计、语法和功能上的差异使它们之间的选择成为一个目的问题。
JSON | YAML | |
语法 | 容易阅读,虽然有括号、逗号和引号。 | 比JSON更容易阅读,但有时会导致属性值的误读。 |
层次结构 | 通过关联数组和列表支持简单层次结构。 | 明确支持对象引用和关系树。 |
复杂度 | 简单的数据类型和结构。 | 有可能拥有复杂的数据结构,有更复杂的数据类型可用。 |
性能 | 更快的生成和解析。 | 更复杂的数据结构会降低解析速度。 |
支持 | 活跃、参与的社区、许多可用的库。 | 比JSON更小的社区,这意味着更少的库和支持。 |
功能 | 它的本地功能比YAML少,这遏制了数据串行化的复杂性。 | 对于复杂的数据序列化来说更加有趣。 |
YAML和JSON:哪个更好?
在选择JSON或YAML时,只要按照函数即可。你需要它们做什么?
JSON具有更快的交付速度,因为它作为一种简单的数据交换格式可以完美运行。但是它仅限于支持的数据类型,这可能需要额外的资源来处理具有更多数据类型选项的数据集。一旦你克服了括号和引号,它就很容易阅读,这是一个优势,因为它们限定了特定的项目,减少了解析误解的风险。
YAML,另一方面,几乎读起来不像是代码。而类似于matryoshka的在对象中包含对象的能力允许更大的数据复杂性。缺点是什么?这种复杂性会减慢解析和生成过程。但由于有一系列复杂的数据类型可用,它有其吸引力,是扩大可用信息类型的一个很好的选择。
要传递的信息的目的和优先级也很重要,在开始编码之前应定义一个逻辑层次结构。这之前的组织将定义文档的结构以及数据的呈现方式。
无论选择哪种方式,都是关于你的数据最终应该做什么。