python中 jsonpath的用法问题?

# 思考,为什么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是一个字段,这个字段不是数组,所以不需要[]

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/631991
  • 这篇博客也不错, 你可以看下python3解析json文件
  • 除此之外, 这篇博客: [600]python之jsonpath中的 JsonPath 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    **官方文档:**http://goessner.net/articles/JsonPath
    https://pypi.org/project/jsonpath/

    JsonPath用符号$表示最外层对象,类似于Xpath中的根元素

    JsonPath可以通过点语法来检索数据,如:shell $.store.book[0].title,也可以使用中括号[]的形式,如shell $['store']['book'][0]['title']

  • 您还可以看一下 Ace老师的Python爬虫开发进阶课程中的 第五讲:数据采集之jsonpath模块方法小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^