走進Java接口測試之理解JSON和XML基礎

引言

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

JSON

JSON 簡介

JSON 是一種用於在多個應用程序之間共享數據的通信格式。JSON代表 JavaScript Object Notation。它基本上是鍵值對的集合。

官網:http://www.json.org/

在線校驗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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章