1. 程式人生 > 其它 >Python | JSON 資料解析(Json & JsonPath)

Python | JSON 資料解析(Json & JsonPath)

JSON 是一種輕量級的資料交換格式。它基於 ECMAScript的一個子集,採用完全獨立於程式語言的文字格式來儲存和表示資料。簡潔和清晰的層次結構使得 JSON 成為理想的資料交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。本文將簡單介紹Python裡JSON模組和JsonPath模組的一些用法。

一、什麼是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 資料進行編解碼,它主要提供了四個方法: dumpsdumploadsload

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不支援

五、例項

暫時沒有喔o(╥﹏╥)o

Collection:因為這些東西是非常簡單的。不要抱怨自己學不會,那是因為你沒有足夠用心。