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的封装示例:

  1. import json

  2. def jsonpath(expr, data):

  3. result = []

  4. if expr.startswith("$."):

  5. expr = expr[2:]

  6. def rocess_data(expr, data):

  7. if isinstance(data, dict):

  8. for key,value in data.items():

  9. if key == expr:

  10. result.append(value)

  11. elif isinstance(value, (dict, list)):

  12. process_data(expr, value)

  13. elif isinstance(data, list):

  14. for item in data:

  15. process_data(expr, item)

  16. try:

  17. json_data = json.loads(data)

  18. process_data(expr, json_data)

  19. except json.JSONDecodeError:

  20. print("Invalid JSON data")

  21. return result

上述代码中,我们定义了一个jsonpath函数,接受两个参数:expr表示 JSONPath表达式,data表示要处理的JSON数据。封装的方法内部使用递归遍历JSON数据,根据表达式匹配对应的值,并将其添加到结果列表中。最后将结果返回。

03 使用封装的JSONPath方法

通过封装的JSONPath方法,我们可以轻松地进行JSON数据的查询和提取。

以下是一个使用封装方法的示例:

  1. data = """

  2. {

  3. "store": {

  4. "book": [

  5. {

  6. "category": "reference",

  7. "author": "Nigel Rees",

  8. "title": "Sayings of the Century",

  9. "price": 8.95

  10. },

  11. {

  12. "category": "fiction",

  13. "author": "Evelyn Waugh",

  14. "title": "Sword of Honour",

  15. "price": 12.99

  16. }

  17. ],

  18. "bicycle":{

  19. "color": "red",

  20. "price": 19.95

  21. }

  22. }

  23. }

  24. """

  25. expression = "$.store.book[0].title"

  26. result = jsonpath(expression, data)

  27. print(result) # 输出: ['Sayings of the Century']

在上述示例中,我们定义了一个JSON数据字符串,并使用封装的jsonpath方法查询JSON数据中的特定值。将表达式$.store.book[0].title作为参数传递给jsonpath方法,它会返回匹配到的结果列表。

总结本文介绍了JSONPath的基本语法和用法,并为您展示了如何封装和使用JSONPath方法来处理和操作JSON数据。通过封装JSONPath方法,我们可以更方便地进行数据查询和提取,提高处理JSON数据的效率和代码可读性。请根据实际需求在不同编程语言中进行相应的封装和使用,以实现更加灵活和便捷的JSON数据处理。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

Spring boot2.X 配置https

背景 最近项目组说要将 http 升级成 https 访问&#xff0c;证书也给到我们这边了&#xff0c;当然我们这边用的是个二级域名&#xff0c;采用的是通配符访问的方式&#xff0c;比如一级域名是这样&#xff08;com.chinaunicom.cn&#xff09;&#xff0c;我们的则是&#xff0…

css预处理器scss的使用如何全局引入

目录 scss 基本功能 1、嵌套 2、变量 $ 3、mixin 和 include 4、extend 5、import scss 在项目中的使用 1、存放 scss 文件 2、引入 variables 和 mixins 2-1、局部引入 2-2、全局引入 3、入口文件中引入其他文件 项目中使用 css 预处理器&#xff0c;可以提高 cs…

【面试】Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?

Elasticsearch 在部署时&#xff0c;对 Linux 的设置有哪些优化方法&#xff1f; Elasticsearch是一个分布式搜索和分析引擎&#xff0c;它在Linux环境下的性能和稳定性可以通过一些优化方法进行提升。以下是一些针对Linux环境下Elasticsearch部署的优化方法&#xff1a; 1. 内…

一文搞懂大疆机场kmz航线和图新地球导出的kmz的区别

0序&#xff1a; 近期有用户问“ 把KML文件放到图新后&#xff0c;想转出来KMZ&#xff08;大疆的机场用的格式&#xff09;但是转出来的KMZ显示格式不对 ” 之前只是知道大疆的航线规划采用的是kml规范&#xff0c;但具体是什么样并不清楚。就这这个问题把这个事情给弄明白。…

京东电商数据采集的三种方式|电商数据API接口实时数据采集

要实现电商的数据分析&#xff0c;电商数据采集是很重要的一环。电商数据采集要分几个步骤完成&#xff1f;每个步骤的意义是什么&#xff1f;每个步骤分别需要怎样的技能&#xff1f;今天这篇文章告诉你。 电商的数据通常需要通过数据采集的方式获得。电商数据采集方法共分为…

Java入门之数据类型

一、数据类型 基本数据类型 &#xff08;1&#xff09;如果要定义“long类型的变量要在数值后面加一个L作为后缀” &#xff08;2&#xff09;如果要定义float类型的变量的时候数据值也要加一个作为后缀 小结&#xff1a; 练习 内容&#xff1a; 姓名&#xff1a;巴巴托斯 &…

软件测试技术之登录页面测试用例的设计方法

相信大家都有过写登录测试用例的经验&#xff0c;相较于开发人员编写代码而言&#xff0c;测试人员编写用例同样重要。本文作者总结了一些关于登录用例的经验。 一、功能测试用例设计&#xff1a; 1、正常登录场景 测试用例1&#xff1a;输入正确的用户名和密码&#xff0c;验证…

JVM(五)——类加载阶段

一、类加载阶段 一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#xff0c;它的整个生命周期将会经历加载 &#xff08;Loading&#xff09;、验证&#xff08;Verification&#xff09;、准备&#xff08;Preparation&#xff09;、解析&#xff08;Resol…

Docker构建多平台(x86,arm64)构架镜像

这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…

Oracle参数文件详解

1、参数文件的作用 参数文件用于存放实例所需要的初始化参数&#xff0c;因为多数初始化参数都具有默认值&#xff0c;所以参数文件实际存放了非默认的初始化参数。 2、参数文件类型 1&#xff09;服务端参数文件&#xff0c;又称为 spfile 二进制的文件&#xff0c;命名规则…

Set和Map数据结构

Set和Map数据结构理解 Set&#xff1a; 1、es6新的数据结构&#xff0c;类似数组&#xff0c;但成员唯一 2、实例属性&#xff1a;Set.prototype.size返回Set实例的成员总数 3、操作方法&#xff1a;add、delete、has、clear 4、遍历操作&#xff1a;forEach、keys、values、en…

前端 CSS 经典:grid 栅格布局

前言&#xff1a;Grid 布局是将容器划分成"行"和"列"&#xff0c;产生单元格&#xff0c;然后将"项目"分配给划分好的单元格&#xff0c;因为有行和列&#xff0c;可以看作是二维布局。 一 术语 1. 容器 采用网格布局的区域&#xff0c;也就是…

MySQL使用教程:数据库、表操作

目录 1. 免密码登录MySQL1.1 免密码配置1.2 登录选项介绍 2. MySQL基础配置&#xff1a;my.cnf3. 开机自启动设置&#xff08;可选设置&#xff09;4. 查看存储引擎5. 查看系统的编码规则和校验规则6. 数据库的操作6.1 查看数据库6.2 创建数据库 create database6.3 删除数据库…

航空实时监控

1、从Kafka中读取飞机数据&#xff0c;并进行清洗 此步骤在前面的“使用Spark清洗统计业务数据并保存到数据库中”任务阶段应该已经完成。如果没有完成&#xff0c;请参考源代码自行完成。核心类主要有三个&#xff1a;SparkStreamingApplication类、SparkUtil类和MapManager类…

3.1 SQL概述

SQL&#xff08;Structured Query Language&#xff09; 结构化查询语言&#xff0c;是关系数据库的标准语言 SQL是一个通用的、功能极强的关系数据库语言 功能&#xff1a;查询&#xff0c;数据库模式创建&#xff0c;数据库数据的插入与修改&#xff0c;数据库完整性、安全…

pytest之fixture结合conftest.py文件使用+断言实战

pytest之fixture结合conftest.py文件使用 conftest.py--存放固件固件的优先级pytest执行流程pytest之断言实战pytest结合allure-pytest插件生成美观的报告 conftest.py–存放固件 在一个项目的测试中&#xff0c;大多数情况下会有多个类、模块、或者包要使用相同的测试夹具。这…

如何使用PHP和RabbitMQ实现延迟队列(方式一)?

前言 今天我们来做个小试验&#xff0c;用PHP和RabbitMQ实现消息队列的延迟功能。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 需要安装RabbitMQ的可以看下面这篇文章。 如何使用PHP和RabbitMQ实现消息队列&#xff1f;-CSDN博客 一、安装RabbitM…

哪个品牌男裤子版型好看?男士春夏季裤子推荐!

最近逐渐开始天气变热&#xff0c;很多朋友都开始挑选换季的衣服了。不过不少朋友都表示现在的男生裤子实在太难选&#xff0c;不仅款式品牌多如牛毛&#xff0c;而且市面上还有不少质量不好的衣裤。 所以我这段时间特别购买了一批衣服回来测评并且上身试穿&#xff0c;今天就…

Vscode循环弹出窗口输入密码的窗口 ‘s password:

今天使用Vscode&#xff0c;连接远程服务器一直不断的弹出窗口&#xff0c;要求输入密码&#xff0c;导致无法显示远程文件。误以为是产品id没有上传成功&#xff0c;导致服务器内没有commid id对应的文件。参考vscode通过ssh链接服务器卡在downloading with wget,但是处理完仍…

java算法第32天 | 贪心算法 part02 ● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 本题中理解利润拆分是关键点&#xff01; 不要整块的去看&#xff0c;而是把整体利润拆为每天的利润。假如第 0 天买入&#xff0c;第 3 天卖出&#xff0c;那么利润为&#xff1a;prices[3] - prices[0]。 相当于(prices[3] - prices[2]) (prices[…