使用jsonpath解析多層嵌套的json響應信息


Python自帶的json庫可以把請求轉為字典格式, 但在多層嵌套的字典中取值往往要進行多次循環遍歷才能取到相應的數據, 如:

res_dict = {
    "code": 0,
    "msg": "成功",
    "data": {
        "users": [
            {"name": "張三", "gender": "male", "age": 12},
            {"name": "李四", "gender": "female", "age": 15},
            {"name": "王五", "gender": "male", "age": 22},
            {"name": "趙六", "gender": "male", "age": 24},
        ],
        "goods": [
            {"name": "apple", "price": 15, "num": 200},
            {"name": "pear", "price": 18, "num": 100},
            {"name": "banana", "price": 16, "num": 210},
        ]
    } 
}
  1. 獲取所有用戶名?
  2. 如果users是動態的(有可能是users123,或users567)怎么獲取下面的數據?
  3. 怎么快說獲取年齡大於20的用戶?

這種類型的操作用字典遍歷往往就麻煩的多, 特別是遇到動態節點更是無從下手
jsonpath則可以很好的解決這個問題。

主要特點

  • 支持路徑及*模糊匹配
  • 支持索引和類似切片功能
  • 支持表達式篩選

jsonpath安裝

pip install jsonpath

jsonpath基本語法

jsonpath語法

jsonpath使用示例

from jsonpath import jsonpath

res_dict = {
    "code": 0,
    "msg": "成功",
    "data": {
        "users": [
            {"name": "張三", "gender": "male", "age": 12},
            {"name": "李四", "gender": "female", "age": 15},
            {"name": "王五", "gender": "male", "age": 22},
            {"name": "趙六", "gender": "male", "age": 24},
        ],
        "goods": [
            {"name": "apple", "price": 15, "num": 200},
            {"name": "pear", "price": 18, "num": 100},
            {"name": "banana", "price": 16, "num": 210},
        ]
    } 
}

# 匹配結果為一個列表, 無結果返回False
# 1. 逐級取值, 可使用*代表任意節點 .. 表示任意路徑
print(jsonpath(res_dict, "$.msg"))  
print(jsonpath(res_dict, "$.data.*"))  # data下的任意節點(users/goods)下的數據
print(jsonpath(res_dict, "$.data..[2]")  # 任意節點(包含users和goods)下的第3個
print(jsonpath(res_dict, "$..users[*].name"))

# 2. 索引和切片
print(jsonpath(res_dict, "$.data.users[2]"))  # 第三個數據
print(jsonpath(res_dict, "$.data.users[0:2]")) # 前兩條數據

# 表達式
print(jsonpath(res_dict, "$..users[?(@.gender=='female')]"))  # 支持和當前數據中的字段比較

更多學習資料請加添加作者微信:lockingfree獲取


免責聲明!

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



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