IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python中JsonPath的使用 -> 正文阅读

[Python知识库]Python中JsonPath的使用

JsonPath

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

Json示例数据:

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    }
}

如果有一个多层嵌套的复杂JSON,想要根据 key-value 或 下标 的方式去批量提取JSON数据里的内容,是比较麻烦的。JsonPath 模块就能解决这个问题

JsonPath 是一种简单的方法来提取给定JSON文档的部分内容。 JsonPath 支持多种编程语言,如Javascript,Java,Python和PHP。

JsonPath语法规则

官方文档:https://goessner.net/articles/JsonPath/

JsonPath 提供的 JSON解析功能非常强大,它提供了类似正则表达式的语法,基本上可以满足所有想要获得的JSON内容。

JsonPath 对于 JSON 来说,相当于 XPath 对于 XML

JsonPath与XPath语法对比:

XpathJsonPath描述
/$根节点
.@现行节点
/. 或 []取子节点
取父节点,Jsonpath未支持
@根据属性访问,Jsonpath未支持,因为Json是个Key-value递归结构,不支持属性访问
**匹配所有元素节点
[][]迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
|[,]支持迭代器中做多选。连接操作符在XPath 结果合并其它结点集合。Jsonpath允许name或者数组索引。
[]?()支持过滤操作
[start: end: step]数组分割操作从ES4借鉴。
()脚本表达式,使用底层脚本引擎。支持表达式计算
()Xpath分组;JsonPath不支持

使用对比

XPathJsonPath描述
/store/book/author$.store.book[*].author获取店内所有书籍的作者
//author$…author获取所有作者
/store/*$.store.*获取store的所有元素。所有的book和bicycle
/store//price$.store…price获取store里面所有东西的价格
//book[3]$…book[2]获取第三本书的所有信息
//book[last()]$..book[(@.length-1)]$..book[-1:]获取最后一本书的所有信息
//book[position()<3] $..book[0,1] $..book[:2]获取前面两本书的所有信息
//book[isbn]$…book[?(@.isbn)]过滤出所有的包含isbn的书信息
//book[price<10]$…book[?(@.price<10)]过滤出价格低于10的书
//*$…*获取所有元素

Xpath索引下标是从1开始的
JsonPath 索引下标是从0开始

Python中JsonPath模块的运用

安装

pip install jsonpath

以Json数据模拟接口返回情况,通过jsonpath模块获取需要的数据

from jsonpath import jsonpath

res = {
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    }
}

# 过滤出所有的包含isbn的书信息
data_book = jsonpath(res,'$..book[?(@.isbn)]')
print(data_book)

# 获取店内所有书籍的作者
data_author = jsonpath(res,'$.store.book[*].author')
print(data_author)

结果:

[{'category': 'fiction', 'author': 'Herman Melville', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}, {'category': 'fiction', 'author': 'J. R. R. Tolkien', 'title': 'The Lord of the Rings', 'isbn': '0-395-19395-8', 'price': 22.99}]

['Nigel Rees', 'Evelyn Waugh', 'Herman Melville', 'J. R. R. Tolkien']
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:48:54  更:2022-04-28 11:49:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:58:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码