python 提取json數據的jsonPath介紹及簡單使用


為什么要用jsonpath

就跟為什么要用xpath一樣,jsonpath的設計靈感來源於xpath。一個強大的json數據提取工具。讓用戶不用編寫腳本就可以提取到相應的json數據。
 
 

jsonpath的語法

jsonpath可以什么這兩種模式來檢索數據:
以點為分隔
$.store.book[0].title
$.store.book[0,1] #可以取到第一個和第二個book值
$.store.book[*].title #可以取到所的的book值
以中括號為分隔
$['store']['book'][0]['title']
對於輸入.路徑,內中路徑將始終使用更通用的中括號模式。 (我猜是因為jsonpath在python中是dict,訪問方式剛好是用中括號)
 
還支持[start:end:step]模式
"$.store.book[0:3:2].title" #和python中的range步長計算是一致的
 
@符號表達式:即可以用來代表長度,也可以用來代表name。
$.store.book[(@.length-1)].title #取到最后一個book的title
$.store.book[?(@.price < 10)].title #取到價格小於10的書的title
 
jsonpath的xpath的語法比較:
 
XPath
JSONPath
描述
/
$
根節點
.
@
現行節點
/
.or[]
取子節點
..
n/a
取父節點,Jsonpath未支持
//
..
就是不管位置,選擇所有符合條件的條件
*
*
匹配所有元素節點
@
n/a
根據屬性訪問,Json不支持,因為Json是個Key-value遞歸結構,不需要屬性訪問。
[]
[]
迭代器標示(可以在里邊做簡單的迭代操作,如數組下標,根據內容選值等)
|
[,]
支持迭代器中做多選。
[]
?()
支持過濾操作.
n/a
()
支持表達式計算
()
n/a
分組,JsonPath不支持
 
 

jsonPath的使用示例

----------------
from jsonpath import jsonpath
 
data = {...} #這個數據是下面的example data
 
print(jsonpath(data, "$.store.book[0:3:2].title")) #按步長取,到第1個和第3本書的titile
print(jsonpath(data, "$.store.book[0:2:2].title")) #按步長取到第1本書的titile
print(jsonpath(data, "$.store.book[?(@.price < 10)].title")) #取價格小於10的書的title
print(jsonpath(data, "$..store.book[(@.length -1)].title")) #取最后一本書的title
----------------
 
example data:
----------------
{ "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 } } }
----------------
 

參考

jsonPath官方文檔


免責聲明!

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



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