一、引言
現如今 Restful API 越來越流行,而 JSON 和 XML 基本上是兩種主流格式用來交換數據,JSON和 XML 都在 Web上有完善的開放標準(RFC 7159,RFC 4825),本文將帶着大家來了解下這個兩種數據格式。

二、JSON
1、JSON 簡介
JSON 是一種用於在多個應用程序之間共享數據的通信格式。JSON代表 JavaScript Object Notation。它基本上是鍵值對的集合。
官網:http://www.json.org/
在線校驗JSON結構的網站:https://jsonformatter.curiousconcept.com/
2、JSON 數據結構
JSON 有兩種數據結構:
- Map,也稱為對象;{….}
- Array;[……]
也就是說所有的 JSON 對象都是要以這些形式表示;
2.1、Map
簡單的說就是 Java 中的 Map,名稱-值對的形式給出,名稱和值之間用 「:」 隔開,兩個Map之間用「,」隔開,一般表示形式如下:
{'key1':'value1','key2':'value2'}
下面的 Object 有 3 個鍵值對
{ "firstName" : "Vijay", "lastName" : "Gupta", "gender" : "Male" }
Map 是一個無序的「『名稱/值』對」集合。一個對象以「{」(左括號)開始,「}」(右括號)結束。每個「名稱」後跟一個「:」(冒號);「『名稱/值』 對」之間使用「,」(逗號)分隔。

2.2、 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的數值非常相似。除去未曾使用的八進制與十六進制格式。除去一些編碼細節。

2.3、嵌套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}
}
2.4、小結
- JSON 的數據結構只有兩種
- 可以嵌套表示,比如 Array 中可以嵌套 Object 等
- Object 是以{}表示,Array是以 [ ] 表示
三、XML
1、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>
1.1、XML語法規則
- 必須包含一個根元素,它是所有其他元素的父元素
- 所有 XML 元素都必須具有結束標記
- XML 標籤區分大小寫
- XML 元素必須正確嵌套
- 必須引用 XML 屬性值
在線校驗XML結構的網站:https://codebeautify.org/xmlvalidator
1.2、XML中的實體引用
某些字符不能用作 XML 標記內的內容。因此,我們用特定文本(稱為實體引用)替換這些字符,以便從字面上解析這些字符
在 XML 中有 5 個預定義的實體引用:

四、JSON與XML互轉示例
在線格式互轉: http://www.utilities-online.info/xmltojson/#.XFE-pegzaUk
1、簡單XML
XML格式:
<person>
<name>zuozewei</name>
<age>20</age>
</person>
JSON格式:
{
"name":"zuozewei",
"age":20
}
2、複雜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是一種數據格式,同時它也是一種語言。它具有許多強大的功能,使其不僅僅是簡單的數據交換數據格式。例如 XPath,屬性和命名空間,XML 模式和 XSLT 等。所有這些功能都是 XML 流行的主要原因。
JSON 並不是為了擁有這樣的功能而設計的,即使它們中的一些現在正試圖在 JSON 中找到它們的位置,例如 JSONPath。
簡而言之,XML 的目的是文檔標記。每當文檔標記和元數據是數據的重要組成部分並且不能被刪除時,總是更喜歡使用 XML。
JSON 的目的是結構化數據交換。它通過直接表示對象,數組,數字,字符串和布爾值來實現此目的。如果不要求元數據和文檔標記,始終使用 JSON。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/224673.html