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

news2024/11/26 7:33:28

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

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

资料获取方式 :

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

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

相关文章

HarmonyOS/OpenHarmony应用开发-Stage模型UIAbility组件使用(五)

UIAbility组件间交互&#xff08;设备内&#xff09; UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时&#xff0c;会涉及到启动特定的UIAbility&#xff0c;该UIAbility可以是应用内的其他UIAbility&#xff0c;也可以是其他应用的UIAbility&#xff08;例如启动…

飞行动力学 - 第11节-纵向静稳定性及各部件贡献 之 基础点摘要

飞行动力学 - 第11节-纵向静稳定性及各部件贡献 之 基础点摘要 1. 气流角2. 操纵面偏角3. 系数的符号4. 纵向、横向、航向稳定性5. 纵向静稳定性5.1 定义5.2 准则5.3 举例5.4 假设5.5 分析5.5.1 机身贡献5.5.2 机翼贡献5.5.3 尾翼贡献 6. 参考资料 1. 气流角 迎角&#xff1a;…

第二章 表的操作与数据类型

第二章 表的操作 一、表的创建&#xff08;1&#xff09;语法&#xff08;2&#xff09;示例 二、查看库中所有表以及具体表结构&#xff08;1&#xff09;语法&#xff08;2&#xff09;示例 三、表的修改&#xff08;1&#xff09;语法&#xff08;2&#xff09;示例 四、表的…

cesium实战(1)、cesium 加载本地json、GeoJson数据

1、cesium加载本地图层json图层数据 并设置样式 添加图层 // 加载路网数据 wms数据服务let addRoadLayer () > {Cesium.GeoJsonDataSource.load(/cesium/layers/road_84.json, {stroke: Cesium.Color.YELLOW,//多边形或线的颜色 strokeWidth: 3,//多边形或线 宽度clampToG…

win10/win11 无线显示器 启用输入 的问题分析与解决

win10、win11系统自带了“无线显示器”应用&#xff0c;可以作为接收端接受其他PC或者手机等设备的投屏显示。 但是使用手机等设备投屏&#xff0c;尤其是三星、华为等手机的类PC模式时总会提示“要启用输入&#xff0c;请转到你的电脑&#xff0c;选择“操作中心”>“连接…

连接另一台电脑的虚拟机

在一个局域网中&#xff0c;ping通另一台电脑是件很容易的事。但是经常会遇到&#xff0c;需要ping到另一台电脑里面的虚拟机&#xff0c;因为我们需要连接它的数据库&#xff0c;或者其他服务。 假设PC A要连接PC B上的虚拟机C。 我们需要做的是&#xff1a; 将C与B的网络连…

C语言数据结构(链表概念讲解和插入操作)

文章目录 前言一、什么是链表二、链表的优点和缺点三、链表节点的定义四、初始化链表五、链表的插入1.头部插入2.尾部插入3.中间插入 六、遍历链表七、释放链表总结 前言 本篇文章带大家正式的来学习数据结构&#xff0c;数据结构是学习操作系统&#xff0c;和深入C语言必不可…

影响伦敦金走势的两大因素是什么?

在伦敦金市场中经历过一段时间&#xff0c;很多人发现&#xff0c;其实要精准预测伦敦金的走势&#xff0c;尤其是短线的走势&#xff0c;是非常难的。但是&#xff0c;判断其大势&#xff0c;却是有一定规律的。在投资世界中&#xff0c;伦敦金投资之外的一些品种的涨跌号称是…

Ubuntu22.04安装显卡驱动(高速、避错版)

关于显卡驱动安装踩坑不少坑&#xff0c;前前后后重装了6、7次&#xff0c;总结了一下目前网上的各种安装方式&#xff0c;整理了本文。 目录导航 1 准备工作1.1 关闭安全模式1.2 切换独显模式1.3 更新软件列表和安装必要软件、依赖1.4 禁用nouveau (nouveau是通用的驱动程序)1…

SpringCloud学习路线(5)—— Nacos配置管理

一、统一配置管理 需求&#xff1a; 微服务配置能实现统一的管理&#xff0c;比如希望改动多个配置&#xff0c;但不希望逐个配置&#xff0c;而是在一个位置中改动&#xff0c;并且服务不用重启即用&#xff08;热更新&#xff09;。 &#xff08;一&#xff09;使用配置管理…

【大模型】与 ChatGPT 齐平、可商用、更强的 LLaMA2 来了

【大模型】可商用且更强的 LLaMA2 来了 LLaMA2 简介论文GitHubhuggingface模型列表训练数据训练信息模型信息 许可证参考 LLaMA2 简介 2023年7月19日&#xff1a;Meta 发布开源可商用模型 Llama 2。 Llama 2是一个预训练和微调的生成文本模型的集合&#xff0c;其规模从70亿到…

【极简 亲测】已拦截跨源请求:同源策略禁止读取位于....的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘)

CORS是Cross-Origin Resource Sharing。 解决 首先这个是浏览器层面的拦截。下面的方法都是解除浏览器拦截的方式。 解除了之后还是有可能其他方面有问题的&#xff0c;但是那个会提示其他错误。 比如CORs Failed之类的&#xff0c;这个是没收到response&#xff0c;大概率是…

施耐德plc编程软件转以太网模块

捷米特JM-ETH-SC 是一款经济型的以太网通讯处理器&#xff0c;是为满足日益增多的工厂设备信息化需求&#xff08;设备网络监控和生产管理&#xff09;而设计&#xff0c;用于施耐德Quantumn/Premiun/TSXMicro/Twdio/M200/M218/M221/M241/M238/M25 等系列 PLC 的以太网数据采集…

分布式光伏电站运维平台在石化行业的应用光伏发电数据实时监控

摘要&#xff1a;为实现绿色发展和“净零排放”的目标&#xff0c;近些年来国内外不少能源化工企业进入光伏发电领域。如何做好光伏电站的运行维护&#xff0c;成为石化企业不得不思考的重要课题。本文从分布式光伏电站消防安全、作业安全、环保管理等方面进行思考&#xff0c;…

浮点类型详解及 IEEE754 规定

【C语言趣味教程】(3) 浮点类型&#xff1a;单精度浮点数 | 双精度浮点型 | IEEE754 标准 &#x1f517; 《C语言趣味教程》&#x1f448; 猛戳订阅&#xff01;&#xff01;&#xff01; ​—— 热门专栏《维生素C语言》的重制版 —— &#x1f4ad; 写在前面&#xff1a;这是…

亿发软件:数字化大中型制造企业生产管理应用,实现智慧工厂信息化

随着信息技术与制造业的深度协调&#xff0c;作为企业发展的趋势&#xff0c;大中型制造企业需要拥抱信息化建设。通过运用信息技术和数字化运营&#xff0c;大中型制造企业的生产、设计、经营、管理、后续服务等都实现自动化、智能化。大中型制造企业信息化建设解决方案&#…

Spark(31):Spark性能调优之算子调优

目录 0. 相关文章链接 1. mapPartitions 2. foreachPartition优化数据库操作 3. filter与coalesce的配合使用 4. repartition解决SparkSQL低并行度问题 5. reduceByKey预聚合 0. 相关文章链接 Spark文章汇总 1. mapPartitions 普通的 map 算子对 RDD 中的每一个元素进行…

肖sir___讲解环境__001

1.jdk是什么&#xff1f; jdk是java代码的编译器&#xff0c;可以理解为“翻译”。 &#xff08;1&#xff09;windows中jdk是在dos中查询&#xff1a;java -version &#xff08;2&#xff09;linux中jdk是在linux服务器查询&#xff1a;java -version ** ** 2、搭建环境服务…

C++初阶 - 3.类和对象(中)

目录 1.类的6个默认成员函数 2.构造函数 2.2特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载 6.日期类的实现 7.const成员 8.取地址及const取地址操作符重载 1.类…

guava-31.1-android.jar时出错; zip file is empty

配置nacos-client时&#xff0c;启动报错guava-31.1-android.jar时出错; zip file is empty 翻看了一下依赖的nacos-api的maven包中&#xff0c;果然有这个版本的guava 在nacos-api中屏蔽掉 <dependency><groupId>com.alibaba.nacos</groupId><artifactI…