# 思考,为什么price下面不用[*]
import json
import jsonpath
file = json.load(open(file='073_尚硅谷_爬虫_解析_jsonpath.json',mode='r',encoding='utf-8'))
# print(file)
# 1、需求1获取书店所有书的作者
author_list = jsonpath.jsonpath(obj=file,expr='$.store.book[*].author')
print(author_list)
# # store里面所有东西的price
price_list = jsonpath.jsonpath(obj=file,expr='$.store..price')
**# 思考,为什么price下面不用[*]**
print(price_list)
源文件格式json
073_尚硅谷_爬虫_解析_jsonpath.json
{
"store": {
"book": [
{
"category": "修真",
"author": "六道",
"title": "坏蛋是怎样练成的",
"price": 8.95
},
{
"category": "修真",
"author": "天蚕土豆",
"title": "斗破苍穹",
"price": 12.99
},
{
"category": "修真",
"author": "唐家三少",
"title": "斗罗大陆",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "修真",
"author": "南派三叔",
"title": "星辰变",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"author": "老马",
"color": "黑色",
"price": 19.95
}
}
}
在jsonpath语法中,使用[]表示获取数组或对象中的所有元素。在这个例子中,$.store..price表示获取store对象下的所有子孙节点中名为price的元素,因为price是一个属性名而不是数组,所以不需要使用[]。如果使用[*],将会报错。
因为在数据中book是一个数组,有多个所以使用[] 而一本书的价格price是一个字段,这个字段不是数组,所以不需要[]
不知道你这个问题是否已经解决, 如果还没有解决的话:**官方文档:**http://goessner.net/articles/JsonPath
https://pypi.org/project/jsonpath/
JsonPath用符号$
表示最外层对象,类似于Xpath中的根元素
JsonPath可以通过点语法来检索数据,如:shell $.store.book[0].title
,也可以使用中括号[]的形式,如shell $['store']['book'][0]['title']