1. 程式人生 > 程式設計 >Python json解析庫jsonpath原理及使用示例

Python 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
   },"author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99
   },"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
  }
 }
}

JsonPath Result
$.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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。