jsonpath可以从json格式中提取数据,通过字符串格式的提取的表达式
pip install jsonpath
data = {
"store": {
"book": [
{"category": "参考",
"author": "Nigel Rees",
"title": "世纪风俗",
"price": 8.95
},
{"category": "小说",
"author": "Evelyn Waugh",
"title": "荣誉剑",
"price": 12.99
},
{"category": "小说",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{"category": "小说",
"author": "JRR Tolkien",
"title": "指环王",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
1.book下第一本书的作者
from jsonpath import jsonpath
#book下第一本书的作者 $表示查询跟节点对象,表示json数据,可以是数组或对象 .获取子节点 ..递归
res1 = jsonpath(data,'$.store.book.0.author')
res2 = jsonpath(data,'$.store.book[0].author')
res3 = jsonpath(data,'$..book[0].author')
print(res1)
print(res2)
print(res3)
执行结果:#book下第一本书的作者 $表示查询跟节点对象,表示json数据,可以是数组或对象 .获取子节点 …递归
2.book下所有书的作者
# #book下所有书的作者 $表示查询根节点对象,表示json数据,可以是数组或者对象; .. 递归; *获取所有节点 . 获取子节点
res4 = jsonpath(data,'$..*.author')
res5 = jsonpath(data,'$..[*].author')
res6 = jsonpath(data,'$..author')
print(res4)
print(res5 )
print(res6 )
执行结果:
! #book下所有书的作者 $表示查询根节点对象,表示json数据,可以是数组或者对象; … 递归; *获取所有节点 . 获取子节点在这里插入图片描述
#store下bicycle的价格
res7 = jsonpath(data,'$..bicycle.price')
print(res7)
执行结果为:$表示查询根节点对象,表示json数据,可以是数组或者对象; … 递归
4.#找到store下面的第二本书
res8 = jsonpath(data,'$.store.book[1]')
print(res8)
5#找到store下的最后一本书 最后一个只能切片,不能索引,索引取不出来 也可以(@.length-1)
#找到store下的最后一本书
res9 = jsonpath(data,'$..book[-1:]') #不支持负索引,只能切片
res10 = jsonpath(data,'$..book[(@.length-1)]')
print(res9)
print(res10)
6#找到第一本和第二本书
#找到第一本和第二本书
res11 = jsonpath(data,'$..book[0,1]')
print(res11)
7.过滤isbn的书,过滤价格小于10元的书(将他们找出来)
# #过滤所有isbn的书
res12 = jsonpath(data,'$..book[?(@.isbn)]')
print(res12)
# #过滤价格小于10元的书
res13 = jsonpath(data,'$..book[?(@.price<10)]')
print(res13)
#$查询根节点的对象;…表示递归;?()过滤表达式 ; @过滤器处理当前节点对象
jsonpath | result |
---|---|
$.store.book.0.author | book下第一本书的作者 |
$.store.book.[0].author | book下第一本书的作者 |
$.store.book.*.author | book下所有书的作者 |
$.store.book.[*].author | book下所有书的作者 |
jsonpath(…递归) | result |
---|---|
$.store…price | store下所有书的价格 |
$…bicycle.price | store下bicycle的价格 |
jsonpath | result |
---|---|
$…book[1] | 找到store下面的第二本书 |
$…book[-1:] | 找到store下的最后一本书 |
$…book[(@.length-1)] | 找到store下的最后一本书 |
$…book[0,2] | 找到第一本和第二本书 |
jsonpath(过滤) | result |
---|---|
$…book[?(@.isbn) | 过滤所有isbn的书 |
$…book[?(@.price<10) | 过滤价格小于10元的书 |