- docx(微软 Word 格式);
- pdf(Adobe 格式);
- mobi(常用于亚马逊 Kindle 设备);
- 以及更多(ePub、djvu、fb2 等)。
JSON
JavaScript 对象表示法。您已经对这种格式有所了解!我们在本课中谈到了它,我们在这里介绍了序列化为 JSON 。它得名是有原因的。转换为 JSON 的 Java 对象实际上看起来与 JavaScript 中的对象完全一样。你不需要了解 JavaScript 来理解我们的对象:
{
"title": "War and Peace",
"author": "Lev Tolstoy",
"year": 1869
}
我们不限于发送单个对象。JSON 格式还可以表示对象数组:
[
{
"title": "War and Peace",
"author": "Lev Tolstoy",
"year": 1869
},
{
"title": "Demons",
"author": "Fyodor Dostoyevsky",
"year": 1872
},
{
"title": "The Seagull",
"author": "Anton Chekhov",
"year": 1896
}
]
因为 JSON 表示 JavaScript 对象,所以它支持以下 JavaScript 数据格式:
- 字符串;
- 数字;
- 对象;
- 数组;
- 布尔值(真和假);
- 无效的。
-
人类可读的格式。如果您的最终用户是人类,这是一个明显的优势。例如,假设您的服务器有一个包含航班时刻表的数据库。一位坐在家里电脑前的人类客户使用 Web 应用程序从该数据库请求数据。因为你需要以他能理解的格式提供数据,JSON 是一个很好的解决方案。
-
简单。非常简单 :) 上面,我们给出了两个 JSON 文件的示例。即使您没有听说过 JavaScript(更不用说 JavaScript 对象),您也可以轻松理解其中描述的对象类型。
整个 JSON 文档由一个带有几张图片的网页组成。 -
广泛使用。JavaScript 是占主导地位的前端语言,它有自己的要求。使用 JSON 是必须的。因此,大量的 Web 服务使用 JSON 作为数据交换格式。每个现代 IDE 都支持 JSON 格式(包括 IntelliJ IDEA)。已经为各种编程语言编写了一堆库以支持使用 JSON。
YAML
最初,YAML 代表“Yet Another Markup Language”。刚开始时,它被定位为 XML 的竞争对手。现在,随着时间的推移,YAML 变成了“YAML Ain't Markup Language”的意思。究竟是什么?假设我们需要创建 3 个类来表示计算机游戏中的角色:Warrior、Mage 和 Thief。他们将拥有以下特征:力量、敏捷、耐力、一套武器。这是描述我们的类的 YAML 文件的样子:
classes:
class-1:
title: Warrior
power: 8
agility: 4
stamina: 7
weapons:
- sword
- spear
class-2:
title: Mage
power: 5
agility: 7
stamina: 5
weapons:
- magic staff
class-3:
title: Thief
power: 6
agility: 6
stamina: 5
weapons:
- dagger
- poison
YAML 文件具有树结构:一些元素嵌套在其他元素中。我们可以使用一定数量的空格来控制嵌套,我们用这些空格来表示每一层。YAML 格式的优点是什么?
-
人类可读。同样,即使看到没有描述的 YAML 文件,您也可以轻松理解它描述的对象。YAML 的可读性很强,以至于yaml.org网站就是一个普通的 YAML 文件 :)
-
紧凑。文件结构是使用空格创建的:无需使用方括号或引号。
-
支持编程语言的本机数据结构。YAML 相对于 JSON 和许多其他格式的巨大优势在于它支持各种数据结构。他们包括:
-
!!map
一组无序的键值对,不能有重复项; -
!!omap
键值对的有序序列,不能重复; -
!!pairs:
键值对的有序序列,可以有重复项; - !!set
一个无序的值序列,彼此不相等; - !!seq
任意值的序列;
您会从 Java 中认出其中的一些结构!:) 这意味着来自编程语言的各种数据结构可以序列化为 YAML。
-
-
能够使用锚点和别名
这些标记允许您识别 YAML 文件中的某些元素,然后在文件的其余部分重复出现时引用它。使用符号&创建锚点,使用*创建别名。
假设我们有一个描述 Leo Tolstoy 书籍的文件。为了避免写出每本书的作者姓名,我们只需创建 leo 锚点,并在需要时使用别名引用它:
books: book-1: title: War and Peace author: &leo Leo Tolstoy year: 1869 book-2: title: Anna Karenina author: *leo year: 1873 book-3: title: Family Happiness author: *leo year: 1859
当这个文件被解析时,值“Leo Tolstoy”被替换到我们有别名的正确位置。
- YAML 可以嵌入其他格式的数据。例如,JSON:
books: [ { "title": "War and Peace", "author": "Leo Tolstoy", "year": 1869 }, { "title": "Anna Karenina", "author": "Leo Tolstoy", "year": 1873 }, { "title": "Family Happiness", "author": "Leo Tolstoy", "year": 1859 } ]
其他序列化格式
XML
此格式基于标记树。
<book>
<title>Harry Potter and the Philosopher’s Stone</title>
<author>J. K. Rowling</author>
<year>1997</year>
</book>
每个元素都包含一个开始和结束标记(<> 和 </>)。每个元素都可以有嵌套元素。XML 是一种与 JSON 和 YAML 一样好的通用格式(如果我们谈论的是真实项目)。我们有一节关于 XML 的单独课程。
BSON(二进制 JSON)
顾名思义,BSON 与 JSON 非常相似,但它不是人类可读的,并且使用二进制数据。因此,它非常适合存储和传输图像及其他附件。此外,BSON 还支持一些 JSON 不支持的数据类型。例如,一个 BSON 文件可以包含一个日期(毫秒格式)甚至一段 JavaScript 代码。流行的 MongoDB NoSQL 数据库以 BSON 格式存储信息。基于位置的协议
在某些情况下,我们需要大幅减少发送的数据量(例如,如果我们有大量数据并需要减少负载)。在这种情况下,我们可以使用基于位置的协议,即发送不带参数本身名称的参数值。
"Leo Tolstoy" | "Anna Karenina" | 1873
这种格式的数据占用的空间比完整的 JSON 文件少几倍。当然,还有其他的序列化格式,但你现在不需要知道所有的:) 如果你在开发应用程序时熟悉当前的行业标准格式,并记住它们的优点以及它们与其他格式的不同之处,那就太好了其他。至此,我们的课程结束了:) 今天别忘了解决几个任务!直到下一次!:)
GO TO FULL VERSION