Jsonpath - 数据中快速查找和提取的强大工具

JSON(JavaScript Object Notation)在现代应用程序中广泛使用,但是如何在复杂的JSON数据中 查找和提取所需的信息呢? JSONPath是一种功能强大的查询语言,可以通过简单的表达式来快速准确地定位和提取JSON数据。本文将介绍JSONPath的基本语法和用法,并为您展示如何封装和使用JSONPath方法来处理和操作JSON数据。
随着互联网和移动应用的高度发展,JSON已成为一种常见的数据交换格式。在处理JSON数据时,经常需要从复杂结构中提取特定的值或对象。传统的遍历和条件语句方法可能显得繁琐且低效。 JSONPath提供了一种更简洁、灵活和高效的方式来查询、定位和提取JSON数据中的内容。
01 JSONPath语法
JSONPath采用类似XPath的语法,使用表达式来描述所需的查询和操作。
以下是一些常用的JSONPath表达式示例:
$:表示根元素
$.key:选择根元素下的指定键名的值
$.*:选择根元素下的所有属性值
$.array[*]:选择根元素中的数组的所有元素
$.key[subkey]:选择根元素中的键名为key,子键名为subkey的值
$.key[*].subkey:选择根元素中的键名为key的所有元素的子键名为subkey的值
过滤表达式:
JSONPath允许使用过滤表达式来筛选符合特定条件的元素。
以下是一些过滤表达式示例:
$.key[?(@.subkey == value)]:选择根元素中key为指定值且具有subkey并且值等于value的元素。
$.array[?(@.value > 10)]:选择根元素中值大于10的数组元素。
范围表达式:
JSONPath支持范围表达式来选择特定的元素范围。
以下是一些范围表达式示例:
$.array[start:end]:选择根元素中从start索引到end索引之间的数组元素。
$.array[:end]:选择根元素中从开头到end索引之间的数组元素。
$.array[start:]:选择根元素中从start索引到末尾的数组元素。
通配符表达式:
JSONPath提供通配符表达式来匹配多个键或数组元素。
以下是一些通配符表达式示例:
$.*:选择根元素下的所有键值对。
$…key:选择根元素和所有子元素中的具有指定键名的值。
操作符表达式:
JSONPath支持许多操作符来进行比较和运算。
以下是一些操作符表达式示例:
$.key[?(@.value > 10 && @.value < 20)]:选择根元素中值大于10且小于20的key。
$.key[?(@.name =~ /pattern/)]:选择根元素中name符合正则表达式pattern的key。
02 封装JSONPath方法
为了更方便地使用JSONPath,我们可以封装一个方法来处理和操作JSON数据。
下面是一个Python的封装示例:
import jsondef jsonpath(expr, data):result = []if expr.startswith("$."):expr = expr[2:]def rocess_data(expr, data):if isinstance(data, dict):for key,value in data.items():if key == expr:result.append(value)elif isinstance(value, (dict, list)):process_data(expr, value)elif isinstance(data, list):for item in data:process_data(expr, item)try:json_data = json.loads(data)process_data(expr, json_data)except json.JSONDecodeError:print("Invalid JSON data")return result
上述代码中,我们定义了一个jsonpath函数,接受两个参数:expr表示 JSONPath表达式,data表示要处理的JSON数据。封装的方法内部使用递归遍历JSON数据,根据表达式匹配对应的值,并将其添加到结果列表中。最后将结果返回。
03 使用封装的JSONPath方法
通过封装的JSONPath方法,我们可以轻松地进行JSON数据的查询和提取。
以下是一个使用封装方法的示例:
data = """{"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}],"bicycle":{"color": "red","price": 19.95}}}"""expression = "$.store.book[0].title"result = jsonpath(expression, data)print(result) # 输出: ['Sayings of the Century']
在上述示例中,我们定义了一个JSON数据字符串,并使用封装的jsonpath方法查询JSON数据中的特定值。将表达式$.store.book[0].title作为参数传递给jsonpath方法,它会返回匹配到的结果列表。
总结本文介绍了JSONPath的基本语法和用法,并为您展示了如何封装和使用JSONPath方法来处理和操作JSON数据。通过封装JSONPath方法,我们可以更方便地进行数据查询和提取,提高处理JSON数据的效率和代码可读性。请根据实际需求在不同编程语言中进行相应的封装和使用,以实现更加灵活和便捷的JSON数据处理。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:
Jsonpath - 数据中快速查找和提取的强大工具
JSON(JavaScript Object Notation)在现代应用程序中广泛使用,但是如何在复杂的JSON数据中 查找和提取所需的信息呢? JSONPath是一种功能强大的查询语言,可以通过简单的表达式来快速准确地定位和提取JSON数据。本文将介…...
java中,通过替换word模板中的关键字后输出一个新文档
一、要用到的jar包 我已上传了相关的jar包,需要的可以通过以下链接直接下载: https://download.csdn.net/download/qq_27387133/88558034 具体jar包截图: 二、实现的代码 注意:文件要用docx格式!!! word变量替换的方法&#…...
MySQL数据库约束你真的懂吗?
✏️✏️✏️今天给各位带来的是关于数据库约束方面的知识 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手,点点关…...
YOCTO 下载repo工具失败解决办法
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repocp repo ~/binchmod ax ~/bin/repo如果使用时报错, 切换ubuntu 到 python3 版本。gedit repo 修改repo默认链接地址:REPO_URL "https://gerrit.googlesource.com/git-repo"…...
github连接失败Host key verification failed.解决方案
问题描述 之前一直用的gitee协同协作,然后再最近一次云计算项目中团队使用的是github进行协作,但是按照常规步骤再GitHub上配置了ssh密钥后,却依然显示连接失败,无法推送和拉取代码,克隆仓库也是报错拒绝。具体报错信…...
【TIDB】TiDB认证考试PTCA 练习题 题库
目录 题目 答案 解析 题目 1.下列功能是由 TiKV 或 TiFlash 实现的为?( 选 2 项 ) A. 根据集群中 Region 的信息,发出调度指令 B. 对于 OLAP 和 OLTP 进行业务隔离 C. 将关系型数据转化为 KV 存储进行持久化 D. 将 KV 存储…...
PPP/INS紧组合算法
前言:在学习紧组合之前学会GNSS/INS松组合是很有必要的,i2NAV团队开源的KF_GINS项目可以作为GNSS/INS松组合学习模板,本文章主要对武汉大学i2NAV发布的PPP/INS紧组合学习资源进行算法层面的总结,链接: 武汉大学多源智…...
【shell】 1、bash语法超详细介绍
文章目录 修改前缀路径dirname set常用函数参数变量local 返回值正则打印第 n 行获取行号核对数据库各表数量jq查询检查日志 sshpassexpect数组xargs bash manual 修改前缀 参考 export PS1"bash> "路径 dirname strip last component from file name dir$(…...
华清远见嵌入式学习——网络编程——作业3
目录 作业要求:基于UDP的TFTP文件传输 代码 下载功能效果图编辑 上传功能效果图 思维导图 模拟面试题和答案(定期更新) 作业要求:基于UDP的TFTP文件传输 完成文件的上传和下载功能 代码 #include<myhead.h>//实现…...
前端学习--React(3)
一、Redux 集中状态管理工具,不需要react即可使用,每个store的数据都是独立于组件之外的 vue小链接:vuex/pinia 基本使用 Redux将数据修改流程分成三个概念,state、action和reducer state - 一个对象 存放我们管理的数据状态 a…...
rotation matrix reflection matrix
文章目录 1. rotation matrix1.1 结论 2. reflection matrix2.1 结论 1. rotation matrix 图像逆时针旋转 θ \theta θ的矩阵 Q r o t a t e [ cos θ − sin θ sin θ cos θ ] (1) Q_{rotate}\begin{bmatrix}\cos\theta&-\sin\theta\\\sin\theta&\c…...
Python基础教程: sorted 函数
嗨喽,大家好呀~这里是爱看美女的茜茜呐 sorted 可以对所有可迭代的对象进行排序操作, sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 从新排序列表。 👇 👇 👇 更多精彩机密、教程…...
Vue 重写push和replace方法,解决:Avoided redundant navigation to current location
当我们使用编程式路由导航跳转路径时,如果我们两次携带同样的参数进行跳转,会进行页面报错: 那产生这个问题的原因是什么呢? 我们接收并输出调用push方法返回的结果: 会发现这是一个Promise对象 我们都知道ÿ…...
43、vue导出pdf文件,并解决滚动条外内容无法获取的问题
使用插件html2canvas和jspdf插件 下载完两个插件后引入所需要的页面 import html2canvas from "html2canvas" import jsPDF from "jspdf"1、在导出之前将元素的高度或者宽度设置为滚动高度或者宽度,如: el.style.height el.scro…...
牛客 最小公配数 golang版实现
题目请参考: HJ108 求最小公倍数 题解: 在大的数的倍数里面去找最小的能整除另外一个数的数,就是最小公倍数,按照大的来找,循环次数能够降到很少,提升效率 golang实现: package mainimport ("fmt" )func main() {a : …...
用 HLS 实现 UART
用 HLS 实现 UART 介绍 UART 是一种旧的串行通信机制,但仍在很多平台中使用。它在 HDL 语言中的实现并不棘手,可以被视为本科生的作业。在这里,我将通过这个例子来展示在 HLS 中实现它是多么容易和有趣。 因此,从概念上讲…...
华清远见嵌入式学习——网络编程——作业4
作业要求:①使用IO多路复用中的select函数实现TCP并发服务器客户端 ②使用IO多路复用中的poll函数实现TCP并发服务器的服务器端 一、 代码 #include <myhead.h>#define SERPORT 8888 //服务器端口号 #define SERIP "192.168.114.113"…...
【OpenCV实现图像:制作酷炫的动画效果】
文章目录 概要生成背景图添加点动画添加文本显示小结 概要 首先,通过导入必要的库,包括NumPy用于数学运算和Matplotlib库用于数据可视化。随后,创建图形和轴,初始化点的位置,以及编写初始化函数和更新函数。 初始化函…...
CSS鼠标属性篇
属性名:cursor 功能:设置鼠标光标的样式 属性值: pointer:小手move:移动图标text:文字选择器crosshair:十字架wait:等待help:帮助 eg.html{ cursor: wait;}(此处使用css改…...
揭秘专业高考美术高本科过线率背后的分层教学逻辑
为什么大锅饭模式很难保证本科过线率?在2026年的美术艺考环境下,单纯靠“堆时间”已经很难拉开差距。很多家长在咨询时都会担心:孩子零基础起步,跟那些画了三四年的学生在一个班,真的能跟上吗?答案往往是残…...
为什么92%的MCP插件在VS Code 1.89+版本崩溃?——基于17个真实生产环境日志的协议兼容性根因分析
更多请点击: https://intelliparadigm.com 第一章:MCP协议演进与VS Code 1.89版本兼容性断层全景图 MCP(Microsoft Code Protocol)并非官方命名,而是开发者社区对 VS Code 扩展宿主通信机制的泛称,特指自 …...
独立开发者月入10万:我的第一个产品复盘
本文旨在从一个具备软件测试专业背景的独立开发者视角,复盘一款首次实现稳定月收入10万元的SaaS产品(姑且称之为“TestFlow”)的完整历程。我将重点剖析从市场洞察、产品构建、质量保障到增长运营的每一个关键节点,特别是如何将专…...
Simulink数据回灌避坑指南:解决MDF信号导入后的时间轴错位与采样率问题
Simulink数据回灌避坑指南:解决MDF信号导入后的时间轴错位与采样率问题 在汽车电控系统开发中,数据回灌技术是验证控制算法有效性的关键手段。当工程师将实测的MDF数据导入Simulink进行仿真时,经常会遇到一个令人头疼的现象:明明数…...
Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill效果展示:编程面试题解析全过程
Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill效果展示:编程面试题解析全过程 1. 模型简介与部署验证 Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill是一个基于vLLM部署的文本生成模型,该模型在约5440万个由Gemini 2.5 Flash生成的token上进行…...
VS Code MCP插件接入实战:3小时完成从零到生产级部署的完整链路拆解
更多请点击: https://intelliparadigm.com 第一章:VS Code MCP 插件生态搭建手册 什么是 MCP 协议与 VS Code 集成价值 MCP(Model Context Protocol)是新一代 AI 工具协同标准,专为 LLM 驱动的开发环境设计。VS Code…...
3步完成:如何在Chrome浏览器中快速转换网页图片格式
3步完成:如何在Chrome浏览器中快速转换网页图片格式 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh_mirrors/sa/Save-Ima…...
别再问Markdown怎么合并单元格了,用这3个HTML属性5分钟搞定
突破Markdown表格限制:HTML合并单元格实战指南 在技术文档写作、知识管理工具(如Obsidian、Typora、Notion)或静态博客(如Hugo、Jekyll)中,Markdown因其简洁高效的特性成为首选格式。然而,当我…...
Facebook三不限账户, 普通户比不了的宽松政策
对于跨境投手、出海企业而言,选对Facebook广告账户类型,是投放成功的第一步。2026年风控持续收紧,不同账户类型的权限、稳定性、适用场景差异显著,很多新手因混淆账户类型、选错渠道,导致开户失败、账户被封或投放受限…...
3分钟解锁Windows安卓魔法:告别笨重模拟器时代
3分钟解锁Windows安卓魔法:告别笨重模拟器时代 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经幻想过,在Windows上运行安卓应用可以像…...

