一、什么是JSON?
JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基於 ECMAScript (歐洲計算機協會制定的js規范)的一個子集,采用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網絡傳輸效率。
簡單地說,JSON 可以將 JavaScript 對象中表示的一組數據轉換為字符串,然后就可以在網絡或者程序之間輕松地傳遞這個字符串,並在需要的時候將它還原為各編程語言所支持的數據格式,例如在 PHP 中,可以將 JSON 還原為數組或者一個基本對象。在用到AJAX時,如果需要用到數組傳值,這時就需要用JSON將數組轉化為字符串。
二、JSON vs XML
-
JSON 與 XML 的相同之處:
- JSON 和 XML 數據都是 "自我描述" ,都易於理解。
- JSON 和 XML 數據都是有層次的結構
- JSON 和 XML 數據可以被大多數編程語言使用
-
JSON 與 XML 的不同之處:
- JSON 不需要結束標簽
- JSON 更加簡短
- JSON 讀寫速度更快
- JSON 可以使用數組
為什么 JSON 比 XML 更好?
XML 比 JSON 更難解析。
JSON 可以直接使用現有的 JavaScript 對象解析。
針對 AJAX 應用,JSON 比 XML 數據加載更快,而且更簡單:
-
使用 XML
- 獲取 XML 文檔
- 使用 XML DOM 迭代循環文檔
- 接數據解析出來復制給變量
-
使用 JSON
- 獲取 JSON 字符串
- JSON.Parse 解析 JSON 字符串
三、Python中JSON模塊的使用
Python3 中可以使用 json 模塊來對 JSON 數據進行編解碼,它主要提供了四個方法: dumps、dump、loads、load。
json.dumps() :將 Python 對象編碼成 JSON 字符串
json.loads() :將已編碼的 JSON 字符串解碼為 Python 對象
在 json 的編解碼過程中,Python 的原始類型與 json 類型會相互轉換,具體的轉化對照如下:
Python 編碼為 JSON 類型轉換對應表:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
JSON 解碼為 Python 類型轉換對應表:
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number (int) | int |
number (real) | float |
true | True |
false | False |
null | None |
json.dump() :將Python內置類型序列化為json對象后寫入文件
json.load() :讀取文件中json形式的字符串元素轉化為Python類型
如果你要處理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 來編碼和解碼JSON數據。例如:
# 寫入 JSON 數據
with open('data.json', 'w') as f:
json.dump(data, f)
# 讀取數據
with open('data.json', 'r') as f:
data = json.load(f)
四、Python中JsonPath模塊的使用
JsonPath 是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,提供多種語言實現版本,包括:Javascript, Python, PHP 和 Java。
JsonPath 對於 JSON 來說,相當於 XPATH 對於 XML。
Json結構清晰,可讀性高,復雜度低,非常容易匹配,下表中對應了XPath的用法。
XPath | JSONPath | 描述 |
---|---|---|
/ |
$ |
根節點 |
. |
@ |
現行節點 |
/ |
. or[] |
取子節點 |
.. |
n/a | 取父節點,Jsonpath未支持 |
// |
.. |
就是不管位置,選擇所有符合條件的條件 |
* |
* |
匹配所有元素節點 |
@ |
n/a | 根據屬性訪問,Json不支持,因為Json是個Key-value遞歸結構,不需要。 |
[] |
[] |
迭代器標示(可以在里邊做簡單的迭代操作,如數組下標,根據內容選值等) |
| |
[,] |
支持迭代器中做多選。 |
[] |
?() |
支持過濾操作. |
n/a | () |
支持表達式計算 |
() |
n/a | 分組,JsonPath不支持 |
注:
decode的作用是將其他編碼的字符串轉換成 Unicode 編碼
encode的作用是將 Unicode 編碼轉換成其他編碼的字符串
一句話:UTF-8是對Unicode字符集進行編碼的一種編碼方式
五、實例
暫時沒有喔o(╥﹏╥)o