共计 2092 个字符,预计需要花费 6 分钟才能阅读完成。
🍀 前言
博客地址:
- CSDN:https://blog.csdn.net/powerbiubiu
👋 简介
JsonPath 是一种信息抽取类库,是从 JSON 文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript、Python、PHP 和 Java。本文介绍 Python 中 JsonPath 模块的运用。
📖 正文
1 JSONPath 的安装
pip install jsonpath -i https://pypi.tuna.tsinghua.edu.cn/simple
2 JSONPath 的语法
JSONPath | 描述 |
---|---|
$ | 表示根元素 |
@ | 当前元素 |
. 或者 [] | 子元素 |
… | 递归下降,JSONPath 是从 E4X 借鉴的 |
* | 通配符,所有对象 / 元素 |
[,] | 连接操作符在 XPath 结果合并其它结点集合。JSONP 允许 name 或者数组索引 |
[start🔚step] | 数组分割操作从 ES4 借鉴 |
?() | 应用过滤表达式 |
() | 脚本表达式,使用底层脚本引擎 |
3 测试数据准备
data = {
"store": {
"books": [
{
"title": "Python 编程入门指南",
"author": "John Smith",
"publication_date": "2022-01-01",
"isbn": "978-1-234567-89-0",
"publisher": "ABC Publishing",
"price": 29.99
},
{
"title": "JavaScript 高级编程",
"author": "Emily Johnson",
"publication_date": "2021-09-15",
"isbn": "978-9-876543-21-0",
"publisher": "XYZ Books",
"price": 39.99
},
{
"title": "数据结构与算法导论",
"author": "David Chen",
"publication_date": "2020-05-10",
"isbn": "978-6-789012-34-5",
"publisher": "DEF Publications",
"price": 49.99
}
],
"pens": [
{
"brand": "Pilot",
"model": "G2",
"ink_color": "Blue",
"tip_size_mm": 0.7,
"price": 2.99
}
]
}
}
4 JSONPath 的使用
4.1 获取所有商品信息
包含商品名称,表达式等价 $.*
store = jsonpath.jsonpath(data, '$.store')
print(store)
不包含商品名称
store = jsonpath.jsonpath(data, '$.store.*')
print(store)
4.2 获取所有书籍信息
res = jsonpath.jsonpath(data,'$.store.books')
print(res)
4.3 获取所有书籍名称
res1 = jsonpath.jsonpath(data,'$.store.books[*].title')
print(res1)
res2 = jsonpath.jsonpath(data, '$..title')
print(res2)
4.4 获取第一本书籍的信息
res = jsonpath.jsonpath(data, '$.store.books[0]')
print(res)
4.5 获取最后一本书籍的信息
res = jsonpath.jsonpath(data, '$.store.books[(@.length-1)]')
print(res)
4.6 获取前两本书籍的信息
表达式等价
.
s
t
o
r
e
.
b
o
o
k
s
[
0
,
1
]
,
.store.books[0,1],
.store.books[0,1],.store.books[:2]
res = jsonpath.jsonpath(data, '$..books[0,1]')
print(res)
4.7 获取第一本书籍的作者
res = jsonpath.jsonpath(data,'$.store.books[0].author')
print(res)
Tips:
当前书籍只有 3 本,所以索引取值为[0,1,2],如果索引越界,返回的结果为 false
4.8 获取所有商品的价格
会把 store 中所有商品 (books,pens) 的价格都获取出来
res = jsonpath.jsonpath(data, '$.store.*..price')
print(res)
4.9 过滤有编号的书籍
res = jsonpath.jsonpath(data, '$..books[?(@.isbn)]')
print(res)
4.10 过滤价格大于 40 的书籍
res = jsonpath.jsonpath(data, '$..books[?(@.price>40)]')
print(res)
4.11 过滤书籍名称包含 Python 的书籍
res = jsonpath.jsonpath(data, '$..books[?("Python"in @.title)]')
print(res)
💖 欢迎关注我的公众号
原文地址: JSON 数据处理利器——Python JSONPath 库详解
正文完