news 2026/6/15 17:10:19

数据中快速查找和提取的强大工具 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/6/15 9:22:00

基于单片机智能扫地吸尘小车

基于单片机的智能扫地吸尘小车 一、系统设计背景与意义 传统家庭清扫依赖人工或大型扫地机器人&#xff0c;存在明显局限&#xff1a;人工清扫耗时费力&#xff0c;桌椅底部、墙角等盲区难以清洁&#xff1b;商用扫地机器人成本高&#xff08;千元以上&#xff09;&#xff0c;…

作者头像 李华
网站建设 2026/6/12 20:00:00

AI+3D生成新玩法:快速搭建文本到3D模型创作环境

AI3D生成新玩法&#xff1a;快速搭建文本到3D模型创作环境 作为一名游戏模组制作者&#xff0c;我最近被豆包3D生成模型深深吸引。它能够根据文本描述直接生成3D模型&#xff0c;这简直是游戏开发者的福音。然而&#xff0c;当我尝试在本地电脑上运行这个模型时&#xff0c;却…

作者头像 李华
网站建设 2026/6/15 11:32:36

Z-Image-Turbo模型解析:深入理解科哥二次开发的技术亮点

Z-Image-Turbo模型解析&#xff1a;深入理解科哥二次开发的技术亮点 如果你对科哥改进的Z-Image-Turbo模型感兴趣&#xff0c;想深入研究其内部机制&#xff0c;首先需要搭建一个能够运行和调试代码的环境。本文将带你一步步完成环境搭建&#xff0c;并解析这个改进版本的技术亮…

作者头像 李华
网站建设 2026/6/15 10:29:32

无障碍设计助手:为视障者自动生成触觉图形

无障碍设计助手&#xff1a;为视障者自动生成触觉图形 什么是触觉图形生成技术 特殊教育学校的老师们经常面临一个难题&#xff1a;如何将教材中的插图快速转化为视障学生可触摸的线稿图形。传统手工制作方式需要耗费大量时间&#xff0c;而"无障碍设计助手"镜像正是…

作者头像 李华
网站建设 2026/6/15 1:25:54

智能相册黑科技:用Z-Image-Turbo自动修复老照片

智能相册黑科技&#xff1a;用Z-Image-Turbo自动修复老照片 作为一名家族史研究者&#xff0c;你是否也遇到过这样的困扰&#xff1f;那些承载着珍贵记忆的老照片&#xff0c;因为年代久远而变得模糊、破损甚至褪色。手动修复不仅进度缓慢&#xff0c;还需要专业的图像处理技能…

作者头像 李华
网站建设 2026/6/15 11:32:35

7个常见的Jmeter压测问题

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 根据在之前的压测过程碰到的问题&#xff0c;今天稍微总结总结&#xff0c;以后方便自己查找。一、单台Mac进行压测时候&#xff0c;压测客户端Jmeter启动超过2…

作者头像 李华