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数据处理。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!  

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

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

相关文章

如何将内容转化为流量?媒介盒子分享

软文营销就是将内容转为流量的常见做法&#xff0c;但是有许多企业在做内容时往往一头雾水导致效果不佳&#xff0c;做内容不是光靠写就可以的&#xff0c;还需要做好选题、类型、结构等&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;如何将内容转化为流量。 一、 确定内…

【SpringBoot开发】之商城项目案例(购物车相关操作)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。&#x1f3af…

2023最新租号平台系统源码支持单独租用或合租使用

这是一款租号平台源码&#xff0c;采用常见的租号模式。目前网络上还很少见到此类类型的源码。 平台的主要功能如下&#xff1a; 支持单独租用或采用合租模式&#xff1b; 采用易支付通用接口进行支付&#xff1b; 添加邀请返利功能&#xff0c;以便站长更好地推广&#xf…

每天刷两道题——第三天

1.1两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09; 输入&#xff1a;[1,2,3,4] 输出&#xff1a;[2,1,4,3…

祝贺首届兽医专业学位研究生创新创业大赛圆满闭幕

为进一步贯彻落实科教兴国、农业强国发展战略&#xff0c;适应兽医行业、产业发展需求&#xff0c;提高兽医专业学位研究生实践创新能力&#xff0c;推动兽医领域高层次应用型人才培养供给侧改革&#xff0c;促进兽医专业学位教育高质量发展&#xff0c;12月28日由中国学位与研…

什么是分布式锁

想象一下&#xff0c;如果没有分布式锁&#xff0c;多个分布式节点同时涌入一个共享资源的访问时&#xff0c;就像一群饥肠辘辘的狼汇聚在一块肉前&#xff0c;谁都想咬一口&#xff0c;最后弄得肉丢了个精光&#xff0c;大家都吃不上。 而有了分布式锁&#xff0c;就像给这块肉…

Python轴承故障诊断 (九)基于VMD+CNN-BiLSTM的故障分类

往期精彩内容&#xff1a; Python-凯斯西储大学&#xff08;CWRU&#xff09;轴承数据解读与分类处理 Python轴承故障诊断 (一)短时傅里叶变换STFT Python轴承故障诊断 (二)连续小波变换CWT_pyts 小波变换 故障-CSDN博客 Python轴承故障诊断 (三)经验模态分解EMD_轴承诊断 …

JAVAEE初阶相关内容第二十弹--HTTP协议

写在前&#xff1a;2024年啦&#xff01;新的一年要努力学习啦 本篇博客围绕HTTP协议&#xff0c;对HTTP协议进行了解&#xff0c;需要理解其工作过程&#xff0c;对HTTP协议格式要清楚&#xff0c;通过抓包工具进行协议分析&#xff0c;认识“方法”、“请求报头”&#xff0c…

爬虫与反爬-localStorage指纹(某易某盾滑块指纹检测)(Hook案例)

概述&#xff1a;本文将用于了解爬虫中localStorage的检测原理以及讲述一个用于检测localStorage的反爬虫案例&#xff0c;最后对该参数进行Hook断点定位 目录&#xff1a; 一、LocalStorage 二、爬虫中localStorage的案例&#xff08;以某盾滑块为例&#xff09; 三、如何…

CSP CCF 201512-2 消除类游戏 C++满分题解

解题思路&#xff1a; 1.用两个矩阵来存储原始值&#xff0c;其中一个永远不改变&#xff0c;只用来判断&#xff0c;这样可以防止消除某一行或某一列后影响其它行或列。 2.记录下每一行每个数字出现的次数和每一列每一个数字出现的次数。 3.只有当某一行或某一列的某个数出…

Ubuntu之修改时区/时间

1、查看当前时间及时区状态 sudo timedatectl status # 显示当前时区为Asia/Shanghai 2、查看当前系统时间 sudo date 3、查看当前系统时间及时区 sudo date -R # 显示当前时间及对应时区&#xff0c;时区为“0800”北京时区 4、修改硬件时间 修改日期格式&#xff1a…

51单片机项目(26)——基于51单片机的超声波测距protues仿真

1.功能设计 用51单片机做的超声波测距系统&#xff0c;用的传感器是HCSR04&#xff0c;将距离实时显示在LCD1602屏幕上&#xff01;&#xff01;内含keil工程 完整的protues文件 可以运行&#xff01;&#xff01;&#xff01; 仿真截图&#xff1a;&#xff08;有一丢丢的误差…

[Mac软件]ColorWell For Mac 7.4.0调色板生成器

美丽而直观的调色板和调色板生成器是任何Web或应用程序开发人员工具包的必要补充&#xff01; 创建无限数量的调色板&#xff0c;快速访问所有颜色信息和代码生成&#xff0c;用于应用程序开发&#xff0c;非常简单。可编辑调色板数据库允许您存档和恢复任何调色板&#xff0c…

x-cmd pkg | lazygit - git 命令的终端 UI

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 lazygit 由 Jesse Duffield 于 2018 年使用 Go 语言构建的 git 终端交互式命令行工具&#xff0c;旨在终端界面中便捷管理 git 存储库。 首次用户 使用 x lazygit 即可自动下载并使用 在终端运行 eval "$(curl …

一站式指南:了解和绘制项目基线

项目基线是记录下来的一个起点&#xff0c;用来建立项目的绩效指标&#xff0c;并将其与之前的基准进行比较。对于所有团队而言&#xff0c;基线是进行有效绩效测量的必需工具。 项目成功的每一步都要依赖于一个坚固的基线。研究表明&#xff0c;在48个大型项目中&#xff0c;…

图神经网络与分子表征:番外——等变术语

本文重点参考了这篇博客&#xff1a;https://nb.bohrium.dp.tech/detail/1342 看论文时经常会遇到 SE3, SO3, O3 等字样&#xff0c;云里雾里&#xff0c;难以理解。本文对这些术语进行集中解释。 文章目录 数学术语GNN 设计要求平移不变性排列、置换不变性镜面等变性旋转等变…

【热点】程序员会不会被人工智能取代?

前两周&#xff0c;ZA技术社区举办了一场主题为“未来&#xff0c;程序员职业会消失吗&#xff1f;”的Geek圆桌派&#xff0c;我作为业务研发的代表参加了此次直播。由于直播时间有限&#xff0c;未能充分表达我的观点&#xff0c;故写此篇博客进行详述。另一方面&#xff0c;…

bootstrap5开发房地产代理公司Hamilton前端页面

一、需求分析 房地产代理网站是指专门为房地产行业提供服务的在线平台。这些网站的主要功能是连接房地产中介机构、房产开发商和潜在的买家或租户&#xff0c;以促成买卖或租赁房产的交易。以下是一些常见的房地产代理网站的功能&#xff1a; 房源发布&#xff1a;房地产代理网…

双语!性能优越|融合黏菌和差分变异的量子哈里斯鹰算法SDMQHHO

前面的文章里卡卡介绍了哈里斯鹰优化算法(Harris Hawks Optimization, HHO).HHO是 Heidari等[1]于2019年提出的一种新型元启发式算法&#xff0c;设计灵感来源于哈里斯鹰在捕食猎物过程中的合作行为以及突然袭击的狩猎风格&#xff0c;具有需调参数少、原理简单易实现、局部搜索…

linux 的直接direct io

目录 什么是 Direct IO java 支持 使用场景 数据库 反思 在之前的文章零拷贝基础上&#xff0c;有一个针对那些不需要在操作系统的 page cache 里保存的情况&#xff0c;即绕过 page cache&#xff0c;对于 linux 提供了 direct io 的功能。 https://blog.csdn.net/zlpzl…