JSON数据处理利器——Python JSONPath库详解

11,985次阅读
没有评论

共计 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 库详解

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-07发表,共计2092字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)