Json基本概念以及Dumps与Loads详见上篇文章,本篇文章主要记录下Jsonpath的详细使用。
Jsonpath是一种类似于 XPath 的查询语言,用于从 JSON 数据中提取数据。它支持多种操作符和内置函数,可以进行高级查询和过滤。
Jsonpath 是 Python 中的一个第三方库,用于从 JSON 数据中提取数据。它支持多种操作符和内置函数,可以进行高级查询和过滤。
以下是 JSONPath 的详细介绍:
安装和导入
使用pip命令安装jsonpath
# 使用pip命令安装jsonpath
pip install jsonpath
# 安装完成后,可以使用一下命令来导入jsonpath
from jsonpath import jsonpath
基本语法
在 JSONPath 中,使用 $ 符号来表示根节点。以下是一些基本的查询语法:
- $: 表示根节点。
- @: 表示当前节点。
- . : 表示子节点。
- … : 表示子孙节点。
- []: 表示索引或过滤条件。
- *****: 表示通配符,匹配任何节点。
- [,]: 表示分隔符,用于在同一个查询中指定多个路径。
以下是一些示例:
import json
from jsonpath import jsonpath
data = {
"bookstore": {
"book": [
{
"title": "Harry Potter",
"price": 29.99
},
{
"title": "The Alchemist",
"price": 12.99
}
]
}
}
# 选择根节点
jsonpath(data, "$")
# 选择书店名称
jsonpath(data, "$.bookstore")
# 选择第一本书的标题
jsonpath(data, "$.bookstore.book[0].title")
# 选择所有书的标题
jsonpath(data, "$.bookstore.book[*].title")
jsonpath(data, "$..title")
操作符
JSONPath 中支持以下操作符:
- ==: 相等。
- !=: 不相等。
- <: 小于。
- <=: 小于等于。
- >: 大于。
- >=: 大于等于。
- (): 分组操作符。
- +: 加法。
- -: 减法。
- *****: 乘法。
- /: 除法。
- %: 取模。
- !: 取反。
- &&: 逻辑与。
- ||: 逻辑或。
以下是一些示例:
import json
from jsonpath import jsonpath
data = {
"bookstore": {
"book": [
{
"title": "Harry Potter",
"price": 29.99
},
{
"title": "The Alchemist",
"price": 12.99
}
]
}
}
# 选择价格小于 20 的书的标题
jsonpath(data, "$.bookstore.book[?(@.price < 20)].title")
过滤器
JSONPath 中支持使用 [] 进行过滤操作。以下是一些示例:
import json
from jsonpath import jsonpath
data = {
"bookstore": {
"book": [
{
"title": "Harry Potter",
"price": 29.99
},
{
"title": "The Alchemist",
"price": 12.99
}
]
}
}
# 选择第一本书和最后一本书的标题
jsonpath(data, "$.bookstore.book[0, -1].title")
# 选择价格最低的书的标题
jsonpath(data, "$.bookstore.book[(@.price == $.bookstore.book[*].price.min())].title")
内置函数
JSONPath 中支持以下内置函数:
- length(): 返回数组或字符串的长度。
- min(): 返回数组中的最小值。
- max(): 返回数组中的最大值。
- sum(): 返回数组中的所有元素的和。
- avg(): 返回数组中所有元素的平均值。
- reverse(): 反转数组的顺序。
以下是一些示例:
import json
data = {
"bookstore": {
"book": [
{
"title": "Harry Potter",
"price": 29.99
},
{
"title": "The Alchemist",
"price": 12.99
}
]
}
}
# 选择书店中所有书的数量
jsonpath.jsonpath(data, "$.bookstore.book.len()")
# 选择书店中价格最低的书的标题
jsonpath.jsonpath(data, "$.bookstore.book[?(@.price == $.bookstore.book[*].price.min())].title")
以上是Python+ JSONPath 的一些基本语法、操作符、过滤器和内置函数的介绍。使用这些功能,你可以轻松地从 JSON 数据中提取所需的信息。