python之jsonpath的使用

文章目录

    • 介绍
    • 安装
    • 语法
      • 语法规则
      • 举例说明
    • 在 python 中使用
      • 获取所有结构
      • 所有子节点的作者
      • 获取所有子孙节点
      • 获取所有价格
      • 取出第三本书的所有信息
      • 取出价格大于70块的所有书本
      • 从mongodb 中取数据的示例

介绍

JSONPath能在复杂的JSON数据中 查找和提取所需的信息,它是一种功能强大的查询语言,可以通过简单的表达式来快速准确地定位和提取JSON数据。本文将介绍JSONPath的基本语法和用法,并为您展示如何封装和使用JSONPath方法来处理和操作JSON数据。
JSONPath类似于XPath提供了一种更简洁、灵活和高效的方式来查询、定位和提取JSON数据中的内容

安装

pip install jsonpath

语法

from jsonpath import jsonpath
res = jsonpath(dict,'jsonpath语法规则字符串')

语法规则

JsonPath描述
$根节点元素,最外层的大括号
@当前节点元素
. 或 []绝对路径,取子节点元素
相对路径,内部的任意位置,选择符合条件的子孙节点元素
*匹配所有元素节点
[]迭代器提示(可以在里边做简单的迭代操作,如数组下标,根据内容筛选)
[,]支持迭代器中做多选
?()支持过滤操作
()支持表达式计算

举例说明

获取书架上的书进行操作

  • 数据结构:
book_dict = {"store":{"book":[{"name": "java 核心编程1","price": "65","isbn": "IS002598934","author" : "周立新"},{"name": "java 核心编程2","price": "64","isbn": "IS876430456","author": "周立新"},{"name" : "java 编程思想","price": "120","isbn": "IS256709873","author": "Bruce Eckel"},{"name" : "RabbitMq 实战指南","price": "79","isbn": "IS987623450","author": "朱忠华"},{"name" : "图解 TCP/IP","price": "69","isbn": "IS9787354679","author": "竹下隆史"}]}
}
  • 结构解析例子
JsonPath结果
$.store.book[*].authorstore 中的所有的 book的作者
$…store.*所有的书籍
$.store…pricestore 中的所有的内容的价格
$…book[2]第三本书
$…book[(@.length-1)] 或 $…book[-1:]最后一本书
$…book[0,1] 或 $…book[:2]前两本书
$…book[?(@.isbn)]获取有 isbn 的所有数
$…book[?(@.price<100)]获取价格<100的所有的书
$…*获取所有的数据

在 python 中使用

如下代码都用单元测试来举例,具体代码链接:去这里

  • 设置测试结构
def setUp(self):"""前置设置@return:"""self.book_dict = {"store": {"book": [{"name": "java 核心编程1","price": 65,"isbn": "IS002598934","author": "周立新"},{"name": "java 核心编程2","price": 64,"isbn": "IS876430456","author": "周立新"},{"name": "java 编程思想","price": 120,"isbn": "IS256709873","author": "Bruce Eckel"},{"name": "RabbitMq 实战指南","price": 79,"isbn": "IS987623450","author": "朱忠华"},{"name": "图解 TCP/IP","price": 69,"isbn": "IS9787354679","author": "竹下隆史"}]}}pass

获取所有结构

def test_all(self):"""获取所有的结构@return:"""dict_data = jsonpath(self.book_dict, '$..*')print("查看dict_data支持的属性和方法:", dir(dict_data))try:for item in dict_data[0]['book']:# 美化打印pprint(item)except Exception as e:print(e)pass

所有子节点的作者

def test_sub_author(self):"""获取所有子节点的作者@return:"""all_author = jsonpath(self.book_dict, '$.store.book[*].author')print(all_author)pass

获取所有子孙节点

def test_sub_all(self):"""获取所有子孙节点@return:"""sub_all = jsonpath(self.book_dict, '$..store.*')print(sub_all)pass

获取所有价格

def test_price_all(self):"""获取子节点的所有价格@return:"""price_all = jsonpath(self.book_dict, '$..price')print("所有的价格:", price_all)price_sum = sum([int(price) for price in price_all])print(f"价格之和:{price_sum}")pass

取出第三本书的所有信息

 def test_book_item(self):"""取出第三本书的所有信息@return:"""book_item = jsonpath(self.book_dict, '$..book[2]')print(book_item)pass

取出价格大于70块的所有书本

def test_book_filter(self):book_count = jsonpath(self.book_dict, '$..book[?(@.price>70)]')print(book_count)

从mongodb 中取数据的示例

遇到复杂的结构可以使用 pprint()来美化打印

def test_mongo_data(self):"""获取mongo中的复杂结构的数据@return:"""dict_data = MongoPool().project_8.coffer_check_data.find_one({"_id": "629dbfe615e74466831b5ce2"})# 美化打印pprint(dict_data)change_list = jsonpath(dict_data, '$..change')print("获取某一个字字段的列表:", change_list)pass

效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式之单例模式(多种实现方式)

虽然写了很多年代码&#xff0c;但是说真的对设计模式不是很熟练&#xff0c;虽然平时也会用到一些&#xff0c;但是都没有深入研究过&#xff0c;所以趁现在有空练下手 这章主要讲单例模式&#xff0c;也是最简单的一种模式&#xff0c;但是因为spring中bean的广泛应用&#…

YoloV8改进策略:BackBone改进|PKINet

摘要 PKINet是面向遥感旋转框的主干,网络包含了CAA、PKI等模块,给我们改进卷积结构的模型带来了很多启发。本文,使用PKINet替代YoloV8的主干网络,实现涨点。PKINet是我在作者的模型基础上,重新修改了底层的模块,方便大家轻松移植到YoloV8上。 论文:《Poly Kernel Ince…

计算机三级网络技术 选择+大题234笔记

上周停去准备计算机三级的考试啦&#xff0c;在考场上看到题目就知道这次稳了&#xff01;只有一周的时间&#xff0c;背熟笔记&#xff0c;也能稳稳考过计算机三级网络技术&#xff01;

鸿蒙开发学习:【华为支付服务客户端案例】

简介 华为应用内支付服务&#xff08;HUAWEI In-App Purchases&#xff09;支持3种商品&#xff0c;包括消耗型商品、非消耗型商品和订阅型商品。 消耗商品&#xff1a;仅能使用一次&#xff0c;消耗使用后即刻失效&#xff0c;需再次购买。非消耗商品&#xff1a;一次性购买…

计算机常见的知识点(3)

计算机系统 系统的构成 一个完整的计算机系统是由硬件和软件组成 硬件是由运算器、控制器、存储器、输入设备、输出设备五部分组成 其中&#xff1a;中央处理器(简称CPU)运算器控制器 主机中央处理器主存储器 计算机软件包括计算机本身运行所需要的系统软件和用户完成任务…

Mybatis中显示插入数据成功,但在数据库中却没有显示插入的数据

1、在mybatis-config.xml中查看是否添加了JDBC&#xff0c;并引入了映射文件 2、在测试文件中&#xff0c;结尾是否添加提交事务&#xff1a;sqlSession.commit() 添加了这一步就能够将数据提交到数据库中&#xff0c;最后再关闭事务&#xff1a;sqlSession.close() * 如果运…

JWT原理分析

为什么会有JWT的出现&#xff1f; 首先不得不提到一个知识叫做跨域身份验证&#xff0c;JWT的出现就是为了更好的解决这个问题&#xff0c;但是在没有JWT的时候&#xff0c;我们一般怎么做呢&#xff1f;一般使用Cookie和Session&#xff0c;流程大体如下所示&#xff1a; 用…

手撕算法-买卖股票的最佳时机 II(买卖多次)

描述 分析 使用动态规划。dp[i][0] 代表 第i天没有股票的最大利润dp[i][1] 代表 第i天持有股票的最大利润 状态转移方程为&#xff1a;dp[i][0] max(dp[i-1][0], dp[i-1][1] prices[i]); // 前一天没有股票&#xff0c;和前一天有股票今天卖掉的最大值dp[i][1] max(dp[i-1…

Linux查看磁盘空间

查看磁盘空间 df -h 查看目录所占空间 du -sh [目录] 查看当前目录下, 所有目录所占空间 (一级目录) find . -maxdepth 1 -type d -exec du -sh {} \;-maxdepth 1 查看的目录深度是1级, 2则是2级

FOCUS-AND-DETECT: A SMALL OBJECTDETECTION FRAMEWORK FOR AERIAL IMAGES

摘要 为了解决小对象检测问题&#xff0c;提出了一个叫做 Focus-and Detect 的检测框架&#xff0c;它是一个两阶段的框架。 第 一阶段包括由高斯混合模型监督的对象检测器网络&#xff0c;生成构成聚焦区域的对象簇 。 第二阶段 也是一个物体探测器网络&#xff0c;预测聚焦…

【云开发笔记No.6】腾讯CODING平台

腾讯云很酷的一个应用&#xff0c;现在对于研发一体化&#xff0c;全流程管理&#xff0c;各种工具层出不穷。 云时代用云原生&#xff0c;再加上AI&#xff0c;编码方式真是发生了质的变化。 从前&#xff0c;一个人可以写一个很酷的软件&#xff0c;后来&#xff0c;这变得…

<商务世界>《第16课 餐桌礼仪之座次》

1 简要 我国自古以来就很重视座位礼仪&#xff0c;非讲究&#xff0c;分君臣、分宾主、分方位等等而今座位礼仪已经简化为&#xff1a; 以“中”为尊&#xff1a; 中心为尊&#xff0c;突出主位。 以“右”为尊&#xff1a; 从历史上到国际上都是以右为尊。 以“内”为尊&…

故障诊断模型 | 基于图卷积网络的轴承故障诊断

文章目录 文章概述模型描述模型描述参考资料文章概述 故障诊断模型 | 基于图卷积网络的轴承故障诊断 模型描述 针对基于图卷积网络(GCN)的故障诊断方法大多默认节点间的权重相同、导致诊断精度较低与鲁棒性较差的问题,提出了一种基于欧式距离和余弦距离的 GCN 故障诊断方法…

力扣热门算法题 62. 不同路径,66. 加一,67. 二进制求和

62. 不同路径&#xff0c;66. 加一&#xff0c;67. 二进制求和&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.21 可通过leetcode所有测试用例。 目录 62. 不同路径 解题思路 完整代码 Python Java 66. 加一 解题思路 …

29-goto语句

29-1 goto语句介绍 C语言中提供了可以随意滥用的goto语句和标记跳转的标号。 从理论上goto语句是没有必要的&#xff0c;实践中没有goto语句也可以很容易的写出代码。 但是某些场合下goto语句还是用得着的&#xff0c;最常见的用法就是终止程序在某些深度嵌套的结构的处理过程…

第十一届蓝桥杯大赛第二场省赛试题 CC++ 研究生组-回文日期

solution1&#xff08;通过50%&#xff09; #include<stdio.h> void f(int a){int t a;while(a){printf("%d", a % 10);a / 10;}if(t < 10) printf("0"); } int isLeap(int n){if(n % 400 0 || (n % 4 0 && n % 100 ! 0)) return 1;r…

抖音IP属地怎么更改

抖音是一个非常受欢迎的短视频平台&#xff0c;吸引了无数用户在上面分享自己的生活和才艺。然而&#xff0c;随着快手的火爆&#xff0c;一些用户开始担心自己的IP地址会被他人获取&#xff0c;引起个人隐私风险。那么&#xff0c;抖音用户又该如何更改到别的地方呢&#xff1…

父类子类构造方法调用示例

父类写无参构造&#xff0c;子类不写构造&#xff0c;实例化子类&#xff0c;会同时调用父类构造方法 public class Father {private String name;private int age;public Father() {System.out.println("父类无参构造");}} public class Son extends Father {priva…

私密个人相册 Android 藏起来你的照片和视频

珍藏每一刻 软件介绍版本号 1.0.0更新日期 2024-03-20 在数字时代&#xff0c;每个人都是自己故事的摄影师。私密个人相册应用&#xff0c;专为珍视隐私与回忆的你设计。我们提供一个安 全的空间&#xff0c;让你的每一张照片和每一个视频都得到妥善保护&#xff0c;同时也能…

通过dbeaver链接dm8数据库

一、环境说明 windows 11 vmware 17 ubuntu 22 tt:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammytt:~$ docker info Client:Version: 24.0.5Context: d…