文章目錄
引言
現如今 Restful API 越來越流行,而 JSON 和 XML 基本上是兩種主流格式用來交換數據,JSON和 XML 都在 Web上有完善的開放標準(RFC 7159,RFC 4825),本文將帶着大家來了解下這個兩種數據格式。
JSON
JSON 簡介
JSON 是一種用於在多個應用程序之間共享數據的通信格式。JSON代表 JavaScript Object Notation。它基本上是鍵值對的集合。
在線校驗JSON結構的網站:https://jsonformatter.curiousconcept.com/
JSON 數據結構
JSON 有兩種數據結構:
- Map,也稱爲對象;{…}
- Array;[…]
也就是說所有的 JSON 對象都是要以這些形式表示;
Map
簡單的說就是 Java 中的 Map,名稱-值對的形式給出,名稱和值之間用 “:” 隔開,兩個Map之間用“,”隔開,一般表示形式如下:
{'key1':'value1','key2':'value2'}
下面的 Object 有 3 個鍵值對
{ "firstName" : "Vijay", "lastName" : "Gupta", "gender" : "Male" }
Map 是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值’ 對”之間使用“,”(逗號)分隔。
Array
就是普通意義上的數組,一般形式如下:
['arr1','arr2','arr3'];
下面的數組有 3 個JSON 對象,每個對象有 3 個鍵值對
[
{"name" : "Potato","stock" : "10", "unit" : "kg"},
{"name" : "Tomato","stock" : "32", "unit" : "kg"},
{"name" : "Onion","stock" : "27", "unit" : "kg"}
]
數組是值(value)的有序集合。一個數組以“[”(左中括號)開始,“]”(右中括號)結束。值之間使用“,”(逗號)分隔。
圖中的值(value)可以是雙引號括起來的字符串(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。這些結構可以嵌套。
字符串(string)是由雙引號包圍的任意數量 Unicode 字符的集合,使用反斜線轉義。一個字符(character)即一個單獨的字符串(character string)。
字符串(string)與C或者Java的字符串非常相似。
數值(number)也與C或者Java的數值非常相似。除去未曾使用的八進制與十六進制格式。除去一些編碼細節。
嵌套Map
JSON對象也可以嵌套:
{
"id": "0001", "type": "donut", "name": "Cake",
"image":
{ "url": "images/0001.jpg", "width": 200, "height": 200},
"thumbnail":
{"url": "images/thumbnails/0001.jpg", "width": 32, "height": 32}
}
小結
- JSON 的數據結構只有兩種
- 可以嵌套表示,比如 Array 中可以嵌套 Object 等
- Object 是以{}表示,Array是以 [ ] 表示
XML
XML簡介
XML 是一種標記語言,也是一種用於在多個應用程序之間共享數據的通信格式,而不是 HTML,它更側重於數據表示。
XML 被設計用來描述數據並關注數據是什麼
XML 標籤不需要預先定義。在 XML 中,標籤和文檔結構由其作者定義。通常,XML標籤是自解釋的,並描述它們之間的內容。
例如:
<section>
<title>BOOK</title>
<signing>
<author name="author-1"/>
<book title="book1" price="$11"/>
</signing>
<signing>
<author name="author-2"/>
<book title="book2" price="$22"/>
</signing>
</section>
XML語法規則
- 必須包含一個根元素,它是所有其他元素的父元素
- 所有 XML 元素都必須具有結束標記
- XML 標籤區分大小寫
- XML 元素必須正確嵌套
- 必須引用 XML 屬性值
在線校驗XML結構的網站:https://codebeautify.org/xmlvalidator
XML中的實體引用
某些字符不能用作 XML 標記內的內容。因此,我們用特定文本(稱爲實體引用)替換這些字符,以便從字面上解析這些字符
在 XML 中有 5 個預定義的實體引用:
JSON與XML互轉示例
在線格式互轉:
http://www.utilities-online.info/xmltojson/#.XFE-pegzaUk
簡單XML
XML格式:
<person>
<name>zuozewei</name>
<age>20</age>
</person>
JSON格式:
{
"name":"zuozewei",
"age":20
}
複雜XML
XML格式:
<section>
<title>BOOK</title>
<signing>
<author name="author-1"/>
<book title="book1" price="$11"/>
</signing>
<signing>
<author name="author-2"/>
<book title="book2" price="$22"/>
</signing>
</section>
JSON格式:
{
"section": {
"title": "BOOK",
"signing": [
{
"author": { "-name": "author-1" },
"book": {
"-title": "book1",
"-price": "$11"
}
},
{
"author": { "-name": "author-2" },
"book": {
"-title": "book2",
"-price": "$22"
}
}
]
}
}
XML VS JSON
對比項 | XML | JSON |
---|---|---|
起源 | 1998年 | 2006年 |
祖先 | SGML | JavaScript |
冗餘 | 更多 | 更少 |
尺寸 | 更大 | 更小 |
序列化和反序列化速度 | 稍慢 | 快 |
數組 | 沒有 | 是 |
命名空間支持 | 是 | 沒有 |
文件格式 | .XML | .json |
瀏覽器渲染 | 是 | 沒有 |
定位 | 面向文檔 | 面向數據 |
混合內容支持 | 是 | 沒有 |
元數據支持 | 是 | 沒有 |
總結
XML是一種數據格式,同時它也是一種語言。它具有許多強大的功能,使其不僅僅是簡單的數據交換數據格式。例如 XPath,屬性和命名空間,XML 模式和 XSLT 等。所有這些功能都是 XML 流行的主要原因。
JSON 並不是爲了擁有這樣的功能而設計的,即使它們中的一些現在正試圖在 JSON 中找到它們的位置,例如 JSONPath。
簡而言之,XML 的目的是文檔標記。每當文檔標記和元數據是數據的重要組成部分並且不能被刪除時,總是更喜歡使用 XML。
JSON 的目的是結構化數據交換。它通過直接表示對象,數組,數字,字符串和布爾值來實現此目的。如果不要求元數據和文檔標記,始終使用 JSON。
參考資料:
[1] https://www.json.org/json-zh.html
[2] https://blog.csdn.net/xiazdong/article/details/7059573