接上篇《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