当前位置: 首页 > news >正文

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&#xff08;JavaScript Object Notation&#xff09;在现代应用程序中广泛使用&#xff0c;但是如何在复杂的JSON数据中 查找和提取所需的信息呢&#xff1f; JSONPath是一种功能强大的查询语言&#xff0c;可以通过简单的表达式来快速准确地定位和提取JSON数据。本文将介…...

java中,通过替换word模板中的关键字后输出一个新文档

一、要用到的jar包 我已上传了相关的jar包&#xff0c;需要的可以通过以下链接直接下载&#xff1a; https://download.csdn.net/download/qq_27387133/88558034 具体jar包截图&#xff1a; 二、实现的代码 注意&#xff1a;文件要用docx格式!!! word变量替换的方法&#…...

MySQL数据库约束你真的懂吗?

✏️✏️✏️今天给各位带来的是关于数据库约束方面的知识 清风的CSDN博客 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; 动动你们发财的小手&#xff0c;点点关…...

YOCTO 下载repo工具失败解决办法

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repocp repo ~/binchmod ax ~/bin/repo如果使用时报错&#xff0c; 切换ubuntu 到 python3 版本。gedit repo 修改repo默认链接地址&#xff1a;REPO_URL "https://gerrit.googlesource.com/git-repo"…...

github连接失败Host key verification failed.解决方案

问题描述 之前一直用的gitee协同协作&#xff0c;然后再最近一次云计算项目中团队使用的是github进行协作&#xff0c;但是按照常规步骤再GitHub上配置了ssh密钥后&#xff0c;却依然显示连接失败&#xff0c;无法推送和拉取代码&#xff0c;克隆仓库也是报错拒绝。具体报错信…...

【TIDB】TiDB认证考试PTCA 练习题 题库

目录 题目 答案 解析 题目 1.下列功能是由 TiKV 或 TiFlash 实现的为&#xff1f;&#xff08; 选 2 项 &#xff09; A. 根据集群中 Region 的信息&#xff0c;发出调度指令 B. 对于 OLAP 和 OLTP 进行业务隔离 C. 将关系型数据转化为 KV 存储进行持久化 D. 将 KV 存储…...

PPP/INS紧组合算法

前言&#xff1a;在学习紧组合之前学会GNSS/INS松组合是很有必要的&#xff0c;i2NAV团队开源的KF_GINS项目可以作为GNSS/INS松组合学习模板&#xff0c;本文章主要对武汉大学i2NAV发布的PPP/INS紧组合学习资源进行算法层面的总结&#xff0c;链接&#xff1a; 武汉大学多源智…...

c++ 演讲比赛流程管理系统 / from.黑马

...

【shell】 1、bash语法超详细介绍

文章目录 修改前缀路径dirname set常用函数参数变量local 返回值正则打印第 n 行获取行号核对数据库各表数量jq查询检查日志 sshpassexpect数组xargs bash manual 修改前缀 参考 export PS1"bash> "路径 dirname strip last component from file name dir$(…...

华清远见嵌入式学习——网络编程——作业3

目录 作业要求&#xff1a;基于UDP的TFTP文件传输 代码 下载功能效果图​编辑 上传功能效果图 思维导图 模拟面试题和答案&#xff08;定期更新&#xff09; 作业要求&#xff1a;基于UDP的TFTP文件传输 完成文件的上传和下载功能 代码 #include<myhead.h>//实现…...

前端学习--React(3)

一、Redux 集中状态管理工具&#xff0c;不需要react即可使用&#xff0c;每个store的数据都是独立于组件之外的 vue小链接&#xff1a;vuex/pinia 基本使用 Redux将数据修改流程分成三个概念&#xff0c;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 函数

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 sorted 可以对所有可迭代的对象进行排序操作&#xff0c; sorted 方法返回的是一个新的 list&#xff0c;而不是在原来的基础上进行的操作。 从新排序列表。 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程…...

Vue 重写push和replace方法,解决:Avoided redundant navigation to current location

当我们使用编程式路由导航跳转路径时&#xff0c;如果我们两次携带同样的参数进行跳转&#xff0c;会进行页面报错&#xff1a; 那产生这个问题的原因是什么呢&#xff1f; 我们接收并输出调用push方法返回的结果&#xff1a; 会发现这是一个Promise对象 我们都知道&#xff…...

43、vue导出pdf文件,并解决滚动条外内容无法获取的问题

使用插件html2canvas和jspdf插件 下载完两个插件后引入所需要的页面 import html2canvas from "html2canvas" import jsPDF from "jspdf"1、在导出之前将元素的高度或者宽度设置为滚动高度或者宽度&#xff0c;如&#xff1a; el.style.height el.scro…...

牛客 最小公配数 golang版实现

题目请参考: HJ108 求最小公倍数 题解: 在大的数的倍数里面去找最小的能整除另外一个数的数&#xff0c;就是最小公倍数&#xff0c;按照大的来找&#xff0c;循环次数能够降到很少&#xff0c;提升效率 golang实现: package mainimport ("fmt" )func main() {a : …...

用 HLS 实现 UART

用 HLS 实现 UART 介绍 UART 是一种旧的串行通信机制&#xff0c;但仍在很多平台中使用。它在 HDL 语言中的实现并不棘手&#xff0c;可以被视为本科生的作业。在这里&#xff0c;我将通过这个例子来展示在 HLS 中实现它是多么容易和有趣。 因此&#xff0c;从概念上讲&#xf…...

华清远见嵌入式学习——网络编程——作业4

作业要求&#xff1a;①使用IO多路复用中的select函数实现TCP并发服务器客户端 ②使用IO多路复用中的poll函数实现TCP并发服务器的服务器端 一、 代码 #include <myhead.h>#define SERPORT 8888 //服务器端口号 #define SERIP "192.168.114.113"…...

【OpenCV实现图像:制作酷炫的动画效果】

文章目录 概要生成背景图添加点动画添加文本显示小结 概要 首先&#xff0c;通过导入必要的库&#xff0c;包括NumPy用于数学运算和Matplotlib库用于数据可视化。随后&#xff0c;创建图形和轴&#xff0c;初始化点的位置&#xff0c;以及编写初始化函数和更新函数。 初始化函…...

CSS鼠标属性篇

属性名&#xff1a;cursor 功能&#xff1a;设置鼠标光标的样式 属性值&#xff1a; pointer&#xff1a;小手move&#xff1a;移动图标text&#xff1a;文字选择器crosshair&#xff1a;十字架wait&#xff1a;等待help&#xff1a;帮助 eg.html{ cursor: wait;}(此处使用css改…...

揭秘专业高考美术高本科过线率背后的分层教学逻辑

为什么大锅饭模式很难保证本科过线率&#xff1f;在2026年的美术艺考环境下&#xff0c;单纯靠“堆时间”已经很难拉开差距。很多家长在咨询时都会担心&#xff1a;孩子零基础起步&#xff0c;跟那些画了三四年的学生在一个班&#xff0c;真的能跟上吗&#xff1f;答案往往是残…...

为什么92%的MCP插件在VS Code 1.89+版本崩溃?——基于17个真实生产环境日志的协议兼容性根因分析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;MCP协议演进与VS Code 1.89版本兼容性断层全景图 MCP&#xff08;Microsoft Code Protocol&#xff09;并非官方命名&#xff0c;而是开发者社区对 VS Code 扩展宿主通信机制的泛称&#xff0c;特指自 …...

独立开发者月入10万:我的第一个产品复盘

本文旨在从一个具备软件测试专业背景的独立开发者视角&#xff0c;复盘一款首次实现稳定月收入10万元的SaaS产品&#xff08;姑且称之为“TestFlow”&#xff09;的完整历程。我将重点剖析从市场洞察、产品构建、质量保障到增长运营的每一个关键节点&#xff0c;特别是如何将专…...

Simulink数据回灌避坑指南:解决MDF信号导入后的时间轴错位与采样率问题

Simulink数据回灌避坑指南&#xff1a;解决MDF信号导入后的时间轴错位与采样率问题 在汽车电控系统开发中&#xff0c;数据回灌技术是验证控制算法有效性的关键手段。当工程师将实测的MDF数据导入Simulink进行仿真时&#xff0c;经常会遇到一个令人头疼的现象&#xff1a;明明数…...

Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill效果展示:编程面试题解析全过程

Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill效果展示&#xff1a;编程面试题解析全过程 1. 模型简介与部署验证 Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill是一个基于vLLM部署的文本生成模型&#xff0c;该模型在约5440万个由Gemini 2.5 Flash生成的token上进行…...

VS Code MCP插件接入实战:3小时完成从零到生产级部署的完整链路拆解

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VS Code MCP 插件生态搭建手册 什么是 MCP 协议与 VS Code 集成价值 MCP&#xff08;Model Context Protocol&#xff09;是新一代 AI 工具协同标准&#xff0c;专为 LLM 驱动的开发环境设计。VS Code…...

3步完成:如何在Chrome浏览器中快速转换网页图片格式

3步完成&#xff1a;如何在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表格限制&#xff1a;HTML合并单元格实战指南 在技术文档写作、知识管理工具&#xff08;如Obsidian、Typora、Notion&#xff09;或静态博客&#xff08;如Hugo、Jekyll&#xff09;中&#xff0c;Markdown因其简洁高效的特性成为首选格式。然而&#xff0c;当我…...

Facebook三不限账户, 普通户比不了的宽松政策

对于跨境投手、出海企业而言&#xff0c;选对Facebook广告账户类型&#xff0c;是投放成功的第一步。2026年风控持续收紧&#xff0c;不同账户类型的权限、稳定性、适用场景差异显著&#xff0c;很多新手因混淆账户类型、选错渠道&#xff0c;导致开户失败、账户被封或投放受限…...

3分钟解锁Windows安卓魔法:告别笨重模拟器时代

3分钟解锁Windows安卓魔法&#xff1a;告别笨重模拟器时代 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经幻想过&#xff0c;在Windows上运行安卓应用可以像…...