from jsonpath import jsonpath
ret = jsonpath.(a,'jsonpath语法规则字符串')
2.3 Jsonpath语法规则
jsonpath
描述
$
根节点
@
现行节点
.or []
取子节点
n/a
取父节点
…
不管位置,选择所有符合条件的条件
*
匹配所有元素节点
n/a
根据属性访问,json不支持,因为json是Key-value递归结构,不需要属性访问
[]
迭代器标识
[,]
支持迭代器中做多选
?()
支持过滤操作
()
支持表达式计算
n/a
分组,Jsonpath不支持
2.4 jsonpath使用
from jsonpath import jsonpath
data ={'key1':{'key2':{'key3':{'key4':{'key5':{'key6':'python'}}}}}}# jsonpath的结果为列表,获取数据需要索引print(jsonpath(data,'$.key1.key2.key3.key4.key5.key6'))print(jsonpath(data,'$..key6')[0])
2.5 jsonpath的练习
import jsonpath
import json
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,
"author": "yin"
}
}
} """
data = json.loads(book_dict)print(jsonpath.jsonpath(data,'$..color'))print(jsonpath.jsonpath(data,'$..price'))
price_list = jsonpath.jsonpath(data,'$..price')sum=0for i in price_list:sum+= i
print(sum)# 打印store中的书的作者print(jsonpath.jsonpath(data,'$.store.book[*].author'))# 打印所有的作者print(jsonpath.jsonpath(data,'$..author'))# 打印所有的价格print(jsonpath.jsonpath(data,'$..price'))# 打印store中的书的价格print(jsonpath.jsonpath(data,'$.store.book[*].price'))# 打印第三本书print(jsonpath.jsonpath(data,'$..book[2]'))# 打印最后一本书print(jsonpath.jsonpath(data,'$..book[-1:]'))# 打印前两本书print(jsonpath.jsonpath(data,'$..book[0,1]'))# 获取所有价格大于10的书print(jsonpath.jsonpath(data,'$..book[?(@.price>10)]'))# 获取有isbn的所有数print(jsonpath.jsonpath(data,'$..book[?(@.isbn)]'))# 获取所有数据print()print(jsonpath.jsonpath(data,'$..*'))