news 2026/4/12 23:40:01

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据中快速查找和提取的强大工具 JSON

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

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈,这些资料希望能给你前进的路上带来帮助。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 7:53:25

全网最全robotframework自动化测试环境搭建

一、前言 1、在2019年之前&#xff0c;robotframework-ride的版本一直是1.5.2.1&#xff0c;是2016年1月份的版本&#xff0c;只能安装在python2.7的环境上&#xff0c;导致如果想同时使用robotframework做测试且又需要python3环境编写python代码的小伙伴都需要在操作系统上安…

作者头像 李华
网站建设 2026/4/6 22:38:54

Spring Cloud核心架构组件深度解析(原理+实战+面试高频)

引言&#xff1a;在微服务架构盛行的当下&#xff0c;Spring Cloud作为基于Spring Boot的微服务开发一站式解决方案&#xff0c;凭借其完整的组件生态、灵活的配置机制和成熟的实践方案&#xff0c;成为了Java后端微服务开发的主流框架。它通过一系列核心组件解决了微服务架构中…

作者头像 李华
网站建设 2026/4/3 3:26:26

单元测试框架 Playwright 使用入门

playwright 介绍 Playwright 是一个端到端&#xff08;E2E&#xff09;测试框架&#xff0c; 它可在所有现代浏览器中运行功能强大的测试和自动化。支持多种编程语言 API&#xff0c; 包括 JavaScript 、 TypeScript, Python, .NET 和 Java。正因为它基于浏览器&#xff0c;相…

作者头像 李华
网站建设 2026/4/10 0:05:59

论文查重降重难题如何破解?知网AI率高怎么办?实用【嘎嘎降AI】与【比话降AI】对比指南

高校毕业季&#xff0c;论文查重和AI率检测成了影响顺利毕业的关键环节。知网AIGC检测对论文AI率的严苛审核&#xff0c;给不少同学带来降重压力。结合真实使用感受&#xff0c;本文细致分析论文降重、查AI率的常见难题&#xff0c;重点介绍两款业界口碑降AI工具——【嘎嘎降AI…

作者头像 李华
网站建设 2026/3/27 13:16:14

CDN加速推荐

白山云科技CDN概述白山云科技&#xff08;BaishanCloud&#xff09;是一家专注于边缘计算和内容分发网络&#xff08;CDN&#xff09;服务的云服务提供商。其CDN服务通过全球分布的边缘节点&#xff0c;帮助用户加速内容分发、降低延迟&#xff0c;并提升终端用户的访问体验。核…

作者头像 李华
网站建设 2026/4/8 13:59:20

多模态探索:快速搭建Z-Image-Turbo与语言模型联合创作环境

多模态探索&#xff1a;快速搭建Z-Image-Turbo与语言模型联合创作环境 如果你是一名AI研究者&#xff0c;想要探索图像生成与语言模型的协同创作潜力&#xff0c;但苦于整合不同AI系统的技术门槛太高&#xff0c;那么这篇文章正是为你准备的。本文将介绍如何利用预配置好的多模…

作者头像 李华