python中jsonpath模塊運用


原文鏈接: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 就是不管位置,選擇所有符合條件的條件
* * 匹配所有元素節點
[] [] 迭代器標示(可以在里面做簡單的迭代操作,如數組下標,根據內容選值等)
&#124 [,] 支持迭代器中做多選
[] ?() 支持過濾操作
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


免責聲明!

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



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