- 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