- docx(微软Word格式);
- pdf(Adobe 格式);
- mobi(常用于亚马逊 Kindle 设备);
- 还有更多(ePub、djvu、fb2...)。
JSON
JavaScript 对象表示法。你对他已经有点熟悉了!我们在本次讲座中讨论了它,并且在这里研究了 JSON 中的序列化。它得名是有原因的。转换为 JSON 的 Java 对象实际上看起来与 JavaScript 对象一模一样。你不需要了解 JavaScript 来理解我们对象的含义:{
"title": "Война и мир",
"author": "Лев Толстой",
"year": 1869
}
没有必要传递一个对象。JSON 还可以包含对象数组:
[
{
"title": "Война и мир",
"author": "Лев Толстой",
"year": 1869
},
{
"title": "Бесы",
"author": "Федор Достоевский",
"year": 1872
},
{
"title": "Чайка",
"author": "Антон Чехов",
"year": 1896
}
]
由于 JSON 是 JavaScript 对象,因此它支持以下 JavaScript 数据格式:
- 字符串;
- 数字(数字);
- 对象(对象);
- 数组(数组);
- 布尔值(true 和 false);
- 无效的。
-
人类可读的格式。如果您的最终用户是人类,这是一个明显的优势。例如,您的服务器存储包含航班时刻表的数据库。人类客户端坐在家里的计算机前,使用 Web 应用程序从该数据库请求数据。由于您需要以他可以理解的格式提供数据,因此 JSON 是一个很好的解决方案。
-
简单。你可以说它是基本的:)上面我们给出了两个 JSON 文件的示例。即使您从未听说过 JavaScript 的存在(更不用说它的对象),您也可以轻松理解其中描述的对象类型。
整个 JSON 文档是一个带有几张图片的网页。 -
广泛。JavaScript 是占主导地位的前端语言,它决定了它的术语。使用 JSON 是必须的。因此,大量的Web服务使用JSON作为交换数据的格式。每个现代 IDE 都支持 JSON 格式(包括 Intellij IDEA)。已经为所有可能的编程语言编写了一堆用于使用 JSON 的库。
YAML
在它出现之初,它代表 Yet Another Markup Language——“另一种标记语言”。当时它被定位为 XML 的竞争对手。现在,随着时间的推移,它代表“YAML Ain't Markup Language”(“YAML 不是标记语言”)。他是什么样的人?假设我们需要为我们的电脑游戏创建 3 个角色类别:战士、法师和小偷。他们将具有以下特征:力量、敏捷、耐力和一套武器。带有类描述的 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 文件:)
-
紧凑。文件结构由空格组成:无需使用括号或引号。
-
支持编程语言原生的数据结构。与 JSON 和许多其他格式相比,YAML 的一个巨大优势是它支持不同的数据结构。他们之中:
-
!!map
键:值对的无序集合,不可能重复; -
!!omap
键:值对的有序序列,不可能重复; -
!!pairs:
键:值对的有序序列,可能存在重复; - !!set
彼此不相等的无序值序列; - !!seq
任意值的序列;
您在 Java 中会熟悉其中一些结构!:) 得益于此功能,您可以将编程语言中的各种数据结构序列化为 YAML 格式。
-
-
能够使用锚点和别名
“锚”和“别名”一词的翻译 - “锚”和“化名”。原则上,它相当准确地描述了 YAML 中这些术语的本质。
它们允许您识别 yaml 文件中的元素,并在该元素重复出现时在文件的其余部分中引用它。锚点是使用符号创建的
&
,别名是使用创建的*
。假设我们有一个包含列夫·托尔斯泰书籍描述的文件。为了避免每次手动写入作者姓名,我们只需创建一个锚点“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)
顾名思义,它与 JSON 非常相似,但人类不可读,并且以二进制格式操作数据。这使得存储和传输图像和其他附件变得非常方便。此外,BSON 支持一些 JSON 中不可用的数据类型。例如,您可以将日期(以毫秒格式)甚至一段 JavaScript 代码写入 BSON 文件中。流行的 NoSQL 数据库 MongoDB 以 BSON 格式存储信息。基于位置的协议
在某些情况下,我们需要大幅减少传输的数据量(例如,如果数据很多并且我们需要减少负载)。在这种情况下,我们可以使用基于位置的协议,即传递参数值而不带参数本身的名称。"Leo Tolstoy" | "Anna Karenina" | 1873
这种格式的数据比完整的 JSON 文件占用的空间少得多。当然,还有其他序列化格式,但您现在不需要了解它们:) 熟悉现在成为应用程序开发行业标准的格式并记住它们的优点和彼此之间的差异是有好处的。我们的讲座已经结束了:)今天别忘了解决几个问题!再见!:)
GO TO FULL VERSION