1. 程式人生 > 實用技巧 >json解析庫jsonpath

json解析庫jsonpath

jsonpath

jsonpath 用於多層巢狀 json格式的 解析。

pip install jsonpath

JsonPath描述
$ 根節點
@ 現行節點
.or[] 取子節點
n/a 取父節點,jsonpath為支援
.. 就是不管位置,選擇所有複合條件的條件
* 匹配所有元素節點
n/a 根據屬性訪問,json不支援,因為json是個key-value遞迴結構,不需要數屬性訪問
[] 迭代器標示(可以在裡邊做簡單的迭代操作,如陣列下標,根據內容選值等)
[,] 支援迭代器中做多選
?() 支援過濾操作
() 支援表示式計算
n/a 分組,JsonPath不支援

jsonpath使用示例

book_dict = { 
  "store": {
    "book": [ 
      { "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      { "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour
", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings
", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } } }
JsonPathResult
$.store.book[*].author store中的所有的book作者
$…author 所有的作者
$.store.* store下的所有元素
$.store…price store中的所有價錢
$…book[2] 第三本書
$…book[(@.length-1)] 最後一本書
$…book[0,1] 取前兩本書
$…book[?(@.isbn)] 獲取有jsbn的所有數
$…book[?(@.price<10)] 獲取價格大於10
$…* 匹配所有資料

使用示例

$ 是查詢的根節點,傳引數是python的dict 型別,當查詢到的時候返回一個list結果,查詢失敗的時候返回 False.

import jsonpath

result = {
    "code": 0,
    "data": [
        {
            "age": 20,
            "create_time": "2019-09-15",
            "id": 1,
            "mail": "[email protected]",
            "name": "yoyo",
            "sex": "M"
        },
        {
            "age": 21,
            "create_time": "2019-09-16",
            "id": 2,
            "mail": "[email protected]",
            "name": "yoyo111",
            "sex": "M"
        }
    ],
    "msg": "success!"
}

msg = jsonpath.jsonpath(result, '$.msg')
print(msg)   # 輸出結果 ['success!']
names = jsonpath.jsonpath(result, '$..name')
print(names)   # 輸出結果 ['yoyo', 'yoyo111']
no = jsonpath.jsonpath(result, '$..yoyo')
print(no)   # 找不到是結果是 False