原文鏈接:https://www.cnblogs.com/denise1108/p/10265911.html
1. jsonpath介紹
用來解析多層嵌套的json數據;JsonPath 是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,提供多種語言實現版本,包括:Javascript, Python, PHP 和 Java。
使用方法如:
import jsonpath
res=jsonpath.jsonpath(dic_name,'$..key_name')
#嵌套n層也能取到所有key_name信息,其中:“$”表示最外層的{},“..”表示模糊匹配,當傳入不存在的key_name時,程序會返回false
2. JsonPath 對於 JSON 來說,相當於 XPath 對於 XML。
安裝方法:pip install jsonpath
官方文檔:http://goessner.net/articles/JsonPath
3. JsonPath與XPath語法對比:
Json結構清晰,可讀性高,復雜度低,非常容易匹配,下表中對應了XPath的用法。
Xpath | JSONPath | 描述 |
---|---|---|
/ | $ | 跟節點 |
. | @ | 現行節點 |
/ | . or [] | 取子節點 |
.. | n/a | 就是不管位置,選擇所有符合條件的條件 |
* | * | 匹配所有元素節點 |
[] | [] | 迭代器標示(可以在里面做簡單的迭代操作,如數組下標,根據內容選值等) |
| | [,] | 支持迭代器中做多選 |
[] | ?() | 支持過濾操作 |
n/a | () | 支持表達式計算 |
() | n/a | 分組,JsonPath不支持 |
4. 使用實例
d={ "error_code": 0, "stu_info": [ { "id": 2059, "name": "小白", "sex": "男", "age": 28, "addr": "河南省濟源市北海大道32號", "grade": "天蠍座", "phone": "18378309272", "gold": 10896, "info":{ "card":434345432, "bank_name":'中國銀行' } }, { "id": 2067, "name": "小黑", "sex": "男", "age": 28, "addr": "河南省濟源市北海大道32號", "grade": "天蠍座", "phone": "12345678915", "gold": 100 } ] } res= d["stu_info"][1]['name'] #取某個學生姓名的原始方法:通過查找字典中的key以及list方法中的下標索引 print(res) #輸出結果是:小黑 import jsonpath res1=jsonpath.jsonpath(d,'$..name') #嵌套n層也能取到所有學生姓名信息,$表示最外層的{},..表示模糊匹配 print(res1) #輸出結果是list:['小白', '小黑'] res2= jsonpath.jsonpath(d,'$..bank_name') print(res2) #輸出結果是list:['中國銀行'] res3=jsonpath.jsonpath(d,'$..name123') #當傳入不存在的key(name)時,返回False print(res3) #輸出結果是:False