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.rhkb.cn/news/281056.html

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

相关文章

JavaMySQL高级一(下)

目录 1.常用函数 1.字符串函数 2.时间日期函数 3.聚合函数 4.数学函数 2.分布查询 3.子查询基础 1.简单子查询 1.常用函数 在程序开发过程中&#xff0c;除了简单的数据查询&#xff0c;还有基于已数据进行数据的统计分析计算等需求。因此&#xff0c;在SQL中将一…

电感回路中的电阻突然变大会怎样

大家好&#xff0c;我是砖一。 我们经常会看到这样一个电路&#xff0c;电感和电阻搭配在一块&#xff0c;加上5v供电&#xff0c;如果电感回路中的电阻突然变大会怎样&#xff1f; 假设电感L1100uH&#xff0c;电阻R110Ω。 图1 串入电感图 1&#xff0c;由开关状态分析电路…

【C语言】基本语法知识C语言函数操作符详解

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;C语言_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.基本语法 1.1 代码解释 1.1.1 main()主函数 1.1.2 int 1.1.3 { } 1.1.4 printf()库函数 1.1.5 stdio.h头文件 1.2 C语言的…

#LT8713SX适用于Type-C/DP1.4转三路Type-C/DP1.4/HDMI2.0应用方案,分辨率高达4K60HZ,支持SST/MST功能。

1. 描述 LT8713SX是一款高性能Type-C/DP1.4转Type-C/DP1.4/HD-DVI2.0转换器&#xff0c;具有三个可配置的DP1.4/HD-DVI2.0/DP输出接口和音频输出接口。LT8713SX 支持 DisplayPort™ 单流传输 &#xff08;SST&#xff09; 模式和多流传输 &#xff08;MST&#xff09; 模式。当…

韵达国际邀您参观2024杭州快递物流供应链与技术装备展览会

2024年7月8-10日 | 杭州国际博览中心 同期举办&#xff1a;数字物流技术展 新能源商用车及物流车展 电商物流包装展 冷链物流展 展会介绍 2024长三角快递物流供应链与技术装备展览会&#xff08;杭州&#xff09;&#xff0c;于2024年7月8-10日在杭州国际博览中心召开&#…

LeetCode每日一题【206. 反转链表】

思路&#xff1a;双指针&#xff0c;一前一后&#xff0c;逐个把指向后面的指针指向前面。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), ne…

Unity Mesh简化为Cube mesh

Mesh简化为Cube mesh &#x1f373;食用&#x1f959;子物体独立生成CubeMesh&#x1f96a;合并成一个CubeMesh&#x1f32d;Demo &#x1f373;食用 下载并导入插件&#x1f448;即可在代码中调用。 &#x1f959;子物体独立生成CubeMesh gameObject.ToCubeMesh_Invidual()…

109 项目整合 spring-quartz 启动自动执行定时任务

前言 项目中使用了 quartz 来支持定时任务的相关基础支撑, 但是 最近添加了一个 资源消耗比较高的定时任务, 发布到测试环境之后, 发现服务突然 起不起来了[资源比较有限] 然后 查看了一下日志, 这个定时任务怎么在执行?, 不是 配置的是 凌晨两点么, 然后 仔细一看 几乎配置…

jscpd检测代码的重复率

官方文档&#xff1a;jscpd jscpd 是一个开源的代码重复检测工具&#xff0c;它用于查找代码中的重复部分并生成相应的报告 1、比较两个目录之间的差异 yarn jscpd --skipLocal sre/test1/** sre/test2 --reporters html生成报告文档在 ./report/html 下面&#xff0c;可以打开…

linux下用docker安装mysql及导入文件

目录 1. 非root用户设置docker权限2. user账号安装mysql2. root账号打开防火墙3. 启动mysql容器3.1 在指定工作目录下建立文件夹3.2 配置文件3.3 开启mysql容器 4. 进入容器4.1 通过容器进入mysql4.1 设置账号4.2 建立数据库4.3 导入文件 5. windows连接数据库参考文件 1. 非ro…

水泥领域智慧工厂物联网解决方案

水泥领域智慧工厂物联网解决方案 在水泥生产行业中&#xff0c;构建智慧工厂物联网解决方案已经成为推动产业升级、实现智能制造的关键路径。该方案深度融合了先进的信息技术与传统的水泥生产工艺&#xff0c;通过全面感知、可靠传输、智能处理等环节&#xff0c;实现了对整个…

MySql实战--深入浅出索引(上)

提到数据库索引&#xff0c;我想你并不陌生&#xff0c;在日常工作中会经常接触到。比如某一个SQL查询比较慢&#xff0c;分析完原因之后&#xff0c;你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引&#xff0c;索引又是如何工作的呢&#xff1f;今天就…

oracle设置主键自增步骤

设置主键自增步骤&#xff1a; 每一张表都要设置序列&#xff0c;然后设置触发器。比mysql繁琐。 一、设置序列 选中表后&#xff0c;—》 文件—》新建—》其他—》序列. 设置如下四个值即可。 crtls保存。 给序列起个名字&#xff0c;一定要全大写字母。 二、设置触发器…

如何设置IDEA远程连接服务器开发环境并结合cpolar实现ssh远程开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

Pudgy Penguins交易量一路攀升 多次创下历史新高

日前&#xff0c;一个名为胖企鹅&#xff08;Pudgy Penguins&#xff09; NFT 项目交易量持续攀升&#xff0c;一度在3月9日成为NFT市场的“销冠”。事实上&#xff0c;从2023年下半年开始&#xff0c;Pudgy Penguins的地板价就在不断上升&#xff0c;进入2024年更是多次创下历…

算法打卡day11

今日任务&#xff1a; 1&#xff09;239. 滑动窗口最大值 2&#xff09;347.前 K 个高频元素 239. 滑动窗口最大值 题目链接&#xff1a;239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移…

TouchGFX之性能测量

TouchGFX Core开放了几个信号&#xff0c;可用于测量性能。 当这些信号在内部触发时&#xff0c;用户可在应用程序中同步触发单个GPIO&#xff0c;从而实现“渲染时间”和其他有用信号的可视化。 信号在GPIO.hpp中定义 /* 用于操作GPIO的接口类&#xff0c;以便在目标硬件上进…

发布 AUR 软件包 (ArchLinux)

首发日期 2024-03-09, 以下为原文内容: 理论上来说, 我们应该平等的对待每一个 GNU/Linux 发行版本. 但是, 因为窝日常使用 ArchLinux, 所以对 ArchLinux 有一些特别的优待, 比如自己做的软件优先为 ArchLinux 打包发布. 本文以软件包 librush-bin 为例, 介绍发布 AUR 软件包的…

构建一个前端智能停车可视化系统

引言 随着城市化进程的加速&#xff0c;停车难问题日益突出。智能停车可视化系统通过实时展示停车场的车位信息&#xff0c;帮助用户快速找到空闲车位&#xff0c;提高停车效率。 目录 引言 一、系统设计 二、代码实现 1. 环境准备 2. 安装依赖 3. 创建停车场组件 4. 集…

【蓝桥杯入门记录】继电器、蜂鸣器及原理图分析

一、继电器、继电器概述 &#xff08;1&#xff09;蜂鸣器原理 蜂鸣器的发声原理由振动装置和谐振装置组成&#xff0c;而蜂鸣器又分为无源他激型与有源自激型&#xff0c;蜂鸣器的发声原理为: 1、无源他激型蜂鸣器的工作发声原理是&#xff1a;方波信号输入谐振装置转换为声…