【Python从入门到进阶】30、JSONPath的介绍和使用

news2024/9/29 21:22:29

接上篇《29、xpath抓取站长素材图片》
上一篇我们讲解了如何利用xpath来抓取站长素材网站的图片区首页的所有图片,本篇我们来介绍JSONPath的基础和具体使用。

一、JSONPath的基本概念

1、什么是JSONPath?

JSONPath是一种用于在JSON(JavaScript Object Notation)数据中定位和提取特定元素的查询语言。它类似于XPath对XML的作用,可以帮助我们轻松地按照特定的路径表达式从复杂的JSON结构中获取所需的数据。

使用JSONPath,您可以指定一个或多个路径表达式,以匹配JSON数据的特定部分。这些路径表达式由一系列操作符、通配符和属性键组成,用于描述所需数据的位置和结构。JSONPath还支持过滤器,可以根据条件筛选出满足要求的数据。

通过使用JSONPath,开发人员可以更有效地处理和解析JSON数据,同时减少冗余代码和手动遍历的工作量。它在Web开发、API集成、数据转换等领域具有广泛的应用。

2、JSONPath的作用和重要性

(1)数据提取和过滤:JSONPath可以帮助我们从复杂的JSON数据结构中提取所需的数据。它允许我们通过简洁的路径表达式定位并获取特定的JSON元素,从而简化了数据提取的过程。同时,JSONPath还支持过滤器,可以根据条件筛选出符合要求的数据,使数据过滤更加灵活和高效。

(2)数据导航和遍历:JSONPath提供了一种便捷的方式来导航和遍历JSON数据。通过使用路径表达式,我们可以按照特定的路径依次访问JSON对象的属性和数组元素,无需手动编写循环和条件语句进行遍历。这大大简化了处理嵌套JSON结构的代码逻辑,提高了开发效率。

(3)API集成和数据交互:在Web开发和API集成中,JSON是一种常见的数据格式。使用JSONPath,我们可以轻松地从API响应中提取所需数据,以满足前端页面或其他后续处理的需求。通过JSONPath,我们可以选择性地提取和展示数据,避免不必要的数据传输和处理,提升了网络通信效率。

(4)数据转换和处理:在数据转换和处理过程中,通常需要对JSON数据进行某种形式的转换、筛选或计算。JSONPath提供了灵活且强大的工具,可以在不改变原始JSON结构的基础上,对数据进行选择性修改、映射和聚合等操作。这在数据清洗、格式转换、数据分析等场景中非常有用。

二、JSON数据结构回顾

1、什么是JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。
它基于JavaScript语言的子集,但已成为一种独立于编程语言的数据格式。

2、JSON的特点

人类可读性高:JSON使用简洁的键值对表示数据,易于阅读和理解。
数据格式简单:JSON由对象、数组、字符串、数字、布尔值和null等基本数据类型组成。
可嵌套和可扩展:可以在JSON中嵌套其他JSON对象,从而创建复杂的数据结构。
平台无关性:JSON数据可以在不同编程语言和平台之间进行传输和解析。

3、JSON数据类型

对象(Object):由一组键值对组成,用花括号{}表示。
数组(Array):由一组有序的值组成,用方括号[]表示。
字符串(String):由双引号或单引号包围的文本。
数字(Number):整数或浮点数形式的数值。
布尔值(Boolean):true或false。
空值(null):表示空或缺失值。

4、JSON对象和数组

对象是一种无序的键值对集合,每个键值对由一个属性名和对应的值构成。
数组是一个有序的值列表,可以包含任意数据类型的元素。

5、嵌套JSON结构

JSON允许在对象或数组中嵌套其他JSON对象或数组,从而形成复杂的数据结构。
嵌套的JSON结构可以通过路径表达式进行导航和访问。

6、JSON数据类型和结构示例

(1)JSON对象示例

{
  "name": "John",
  "age": 30,
  "city": "New York"
}

(2)JSON数组示例

["apple", "banana", "orange"]

(3)嵌套JSON示例

{
  "name": "Alice",
  "age": 25,
  "address": {
    "street": "123 Main St",
    "city": "Los Angeles",
    "zipcode": "90001"
  },
  "hobbies": ["reading", "painting", "traveling"]
}

(4)复杂嵌套JSON示例

{
  "employees": [
    {
      "firstName": "John",
      "lastName": "Doe",
      "position": "Manager"
    },
    {
      "firstName": "Jane",
      "lastName": "Smith",
      "position": "Developer"
    }
  ],
  "company": {
    "name": "ABC Corporation",
    "address": {
      "street": "456 Elm St",
      "city": "Seattle",
      "zipcode": "98101"
    }
  }
}

接下来我们就会用JSONPath来取解析这些结构类型的JSON数据。

学习JSON的基本概念和数据结构,能使我们能更好地理解和操作JSON数据,同时为下面介绍JSONPath的语法和用法打下基础。

三、JSONPath表达式

JSONPath是一种用于在JSON数据结构中定位和提取数据的查询语言。它类似于XPath用于XML的查询语言。以下是JSONPath的一些常见语法:

注意:
●JSONPath的索引从0开始计数;
●JSONPath中字符串使用单引号表示,如:$store.book[?@.category=='reference']中的reference;
JSONPath常见的运算符:

JSONPath常见的函数:

四、JSONPath数据提取案例

样例JSON:

{
   "商店":{
       "书籍":[{
          "分类":"惊悚",
          "作者":"R.L.斯坦",
          "书名":"鸡皮疙瘩",
          "价格":18.95
       },{
          "分类":"冒险",
          "作者":"J.K.罗琳",
          "书名":"哈利波特与火焰杯",
          "书号":"ND-2131-34421",
          "价格":52.99
       },{
          "分类":"科幻",
          "作者":"刘慈欣",
          "书名":"三体",
          "价格":65.35
       },{
          "分类":"科幻",
          "作者":"刘慈欣",
          "书名":"流浪地球",
          "价格":32.99
       }],
       "自行车":{
          "品牌":"凤凰牌自行车",
          "颜色":"红色",
          "价格":150.3
       }
   }
}

注:这里我们可以使用在线JSONPath解析器来测试我们的公式(样例网站:https://www.lddgo.net/string/jsonpath)。

测试样例:

测试结果(其中几个有代表性的样例):






我们也可以尝试用语法获取我们想要的其他维度数据,童鞋们不妨试试。

五、JSONPath与XPath的对比

JSONPath和XPath都是用于在数据结构中进行查询和导航的路径语言,但它们针对不同的数据格式。

1、数据格式:JSONPath专门用于查询和操作JSON格式的数据,而XPath主要用于XML格式的数据。

2、语法:JSONPath的语法相对简单,类似于JavaScript对象属性的访问方式,例如$.store.book[0].title。XPath的语法相对复杂,可以使用轴、谓词等功能来完成更复杂的查询操作。

3、功能:XPath提供了比JSONPath更强大的功能,包括节点选择、属性选择、命名空间支持、动态计算等。它还有一个完善的标准规范,支持更广泛的用例和应用。JSONPath则更专注于JSON数据的查询和操作。

4、生态系统:由于XPath的历史悠久和广泛应用于XML领域,有许多成熟的工具和库支持XPath查询。相比之下,JSONPath的生态系统相对较小,但在处理JSON数据时仍有一些支持库和工具可用。

下表仅就数据维度进行对比,两者分析的样本是不同的(XML和JSON):

综上所述,如果你的数据是JSON格式的,且只需要进行简单的查询和操作,那么JSONPath是一个简单而有效的选择;如果你的数据是XML格式的,或者需要进行更复杂的查询和处理,那么XPath可能更适合。

六、Python如何使用JSONPath

在Python中,通常使用使用内置的jsonpath库来处理JSONPath查询(也可以可以使用第三方库如jsonpath-ng或jsonpath-rw)。

在使用前要通过“pip install jsonpath”命令安装jsonpath库。以下是使用jsonpath库的示例代码:

import json
from jsonpath import jsonpath

# 示例 JSON 数据
data = '''
    {
       "商店":{
           "书籍":[{
              "分类":"惊悚",
              "作者":"R.L.斯坦",
              "书名":"鸡皮疙瘩",
              "价格":18.95
           },{
              "分类":"冒险",
              "作者":"J.K.罗琳",
              "书名":"哈利波特与火焰杯",
              "书号":"ND-2131-34421",
              "价格":52.99
           },{
              "分类":"科幻",
              "作者":"刘慈欣",
              "书名":"三体",
              "价格":65.35
           },{
              "分类":"科幻",
              "作者":"刘慈欣",
              "书名":"流浪地球",
              "价格":32.99
           }]
       }
    }
'''

# 解析 JSON 数据
json_data = json.loads(data)

# 进行 JSONPath 查询
titles = jsonpath(json_data, "$.商店.书籍[*].书名")

# 打印匹配结果
for title in titles:
    print(title)

输出结果为:

首先,我们解析了JSON数据字符串,并将其转换为Python对象。然后,通过调用jsonpath函数并传入JSON数据和JSONPath表达式$.store.book[*].title,进行查询操作,最后打印匹配的结果。

以上就是关于JSONPath的介绍和使用分享,下一篇我们来做一个JSONPath来解析淘票票的实战。


参考:尚硅谷Python爬虫教程小白零基础速通教学视频、JSON语法手册

转载请注明出处:https://guangzai.blog.csdn.net/article/details/131933738

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/808100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

致敬图灵!HashData拥抱数据智能新时代!

图1:2023ACM中国图灵大会现场 生于1912年的艾伦图灵被称为“计算机科学之父”、“人工智能之父”。1966年,国际计算机协会(ACM)为了纪念这位卓越的科学家,设立了以其名字命名的ACM图灵奖,以表彰在计算机领…

RH850 1372/1374 程序跑飞异常分析

文章目录 前言现象描述原因分析解决方案总结 前言 最近项目用瑞萨RH850系列的1372/1374开发,官方的MCAL做的不咋地就算了,FAE支持也很少。给的demo问题也很多。本文记录一下开发过程中的问题。 现象描述 MCAL配置完ADC1后,运行ADC1的采样程…

SQL注入原理分析

前言 order by的作用及含义 order by 用于判断显示位,order by 原有的作用是对字段进行一个排序,在sql注入中用order by 来判断排序,order by 1就是对一个字段进行排序,如果一共四个字段,你order by 5 数据库不知道怎么…

51:电机(ULN2003D)

1:介绍 我们51单片机使用的是直流电机 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转…

【Java|基础篇】File类和IO流

文章目录 1.File类2.流的概念3.InputStream4.OutputStream5.Reader6.Writer7.使用Scanner读文件8.使用PrintWriter写文件9.close()方法10.flush()方法10.总结 1.File类 File类是Java中用于表示文件或目录的类。它提供了一些方法来操作文件和目录的属性和内容,可以进…

对js中的window深入理解

window和 document的区别 window对象是浏览器中的全局对象,代表的是整个浏览器窗口;document只是window对象中的一部分,表示当前窗口或框架中加载的HTML文档,主要用于访问和操作文档的内容,包括DOM元素、样式、事件等&…

华为OD机试真题 Java 实现【AI面板识别】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、控制台输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&#xff08…

【Javalin 】Javalin Kotlin/Java 轻量级 REST API 库

Javalin 旨在为 Kotlin 和 Java 提供一个易用的轻量级 REST API 库。这个 REST API 易于使用,API 也非常的流畅。 Javalin 主要有以下的特点: 易用:不用提前学习任何概念就可以开始使用 一致的 API:所有的处理程序和映射器在 Co…

基于RK3588+AI的边缘计算算法方案:智慧园区、智慧社区、智慧物流

RK3588 AI 边缘计算主板规格书简介 关于本文档 本文档详细介绍了基于Rockchip RK3588芯片的AI边缘计算主板外形、尺寸、技术规格,以及详细的硬件接口设计参考说明,使客户可以快速将RK3588边缘计算主板应用于工业互联网、智慧城市、智慧安防、智慧交通&am…

年轻人的第一套海景房

前段时间新房装修,我把书房设计成工作室的风格,并自己装配了一台电脑,本文是对电脑选购与装配的一则经验贴,仅包含我对计算机硬件的浅薄理解。 配件选购 装机契源 事实上,很多电脑店都提供装配和测试服务&#xff0c…

【二叉树】刷题二(以递归写法为主)

617. 合并二叉树 class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:root TreeNode()if not root1 and not root2:returnelif root1 and not root2:root root1elif not root1 and root2:root root2elif…

AD21原理图的高级应用(一)端口的应用

(一)端口的应用 1.放置端口2.自动给端口添加页码 说明,博主的AD版本是AD21,所有的工程都基于AD21,虽然AD软件几乎不存在版本兼容性问题,但还是建议大家使用对应版本的软件来学习。 资料仅供学习使用。 1.…

013 怎么查看自己电脑的wifi密码

方法一:查看当前电脑连接的无线密码 步骤1: 打开windows命令行窗口,输入:ncpa.cpl 快速打开“控制面板”中的“网络连接”,如下图: 步骤2: 右键,打开“状态” 步骤3:…

Pearson correlation皮尔逊相关性分析

在参数检验的相关性分析方法主要是皮尔逊相关(Pearson correlation)。既然是参数检验方法,肯定是有一些前提条件。皮尔逊相关的前提是必须满足以下几个条件: 变量是连续变量;比较的两个变量必须来源于同一个总体&…

瓦瑟斯坦距离、收缩映射和现代RL理论

Wasserstein Distance, Contraction Mapping, and Modern RL Theory | by Kowshik chilamkurthy | Medium 一、说明 数学家们在考虑一些应用的情况下探索的概念和关系 - 几十年后成为他们最初从未想象过的问题的意想不到的解决方案。 黎曼的几何学只是出于纯粹的原因才被发现的…

Abaqus 导出单元刚度矩阵和全局刚度矩阵

Abaqus 导出单元刚度矩阵和全局刚度矩阵 首次创建:2023.7.29 最后更新:2023.7.29 如有什么改进的地方,欢迎大家讨论! 详细情况请查阅:Abaqus Analysis User’s Guide 一、Abaqus 导出单元刚度矩阵 1.生成单元刚度矩阵…

Kafka原理剖析

一、简介 Kafka是一个分布式的、分区的、多副本的消息发布-订阅系统,它提供了类似于JMS的特性,但在设计上完全不同,它具有消息持久化、高吞吐、分布式、多客户端支持、实时等特性,适用于离线和在线的消息消费,如常规的…

安装Anaconda3和MiniConda3

MiniConda3官方版是一款优秀的Python环境管理软件。MiniConda3最新版只包含conda及其依赖项如果您更愿意拥有conda以及超过720个开源软件包,请安装Anaconda。MiniConda3官方版还是一个开源的软件包管理系统和环境管理系统,能够帮助用户安装多个版本的软件…

Android高德地图定位实现签到打卡功能(全网最详细+收藏)

前言 本章根据高德地图API,实现打卡签到功能。用到了定位SDK 和地图SDK、覆盖物。打卡范围图形可以支持多种形状,如:圆形、长方形、多边形。 核心逻辑: 获取当前定位信息,然后通过Marker绘制小图标进行展示&a…

IO流(1)-字符流与字节流

1. I/O流前置知识 在讲解IO流之前,需要先说明几个小知识点: (1)bit 是最小的二进制单位,是计算机的操作部分,取值0或1。 (2)Byte(字节)是计算机操作数据的…