Python | JSON 數據解析(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不支持

注:
decode的作用是將其他編碼的字符串轉換成 Unicode 編碼
encode的作用是將 Unicode 編碼轉換成其他編碼的字符串
一句話:UTF-8是對Unicode字符集進行編碼的一種編碼方式

五、實例

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM