- 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