热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

介绍JSONPath

JSONPath之于JSON,就如XPath之于XML。JSONPath可以方便对JSON数据结构进行内容提取。JsonPath示例下面是相应的JsonPath的

JSONPath 之于 JSON,就如 XPath 之于 XML。JSONPath 可以方便对 JSON 数据结构进行内容提取。

JsonPath示例

下面是相应的JsonPath的示例,代码来源于JSONPath - XPath for JSON,JSON文档如下:

{"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}, {"category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99}, {"category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}}
}

接下来我们看一下如何对这个文档进行解析:

XPathJsonPathResult
/store/book/author$.store.book[*].author所有book的author节点
//author$..author所有author节点
/store/*$.store.*store下的所有节点,book数组和bicycle节点
/store//price$.store..pricestore下的所有price节点
//book[3]$..book[2]匹配第3个book节点
//book[last()]$..book[(@.length-1)],或 $..book[-1:]匹配倒数第1个book节点
//book[position()<3]$..book[0,1]&#xff0c;或 $..book[:2]匹配前两个book节点
//book[isbn]$..book[?(&#64;.isbn)]过滤含isbn字段的节点
//book[price<10]$..book[?(&#64;.price<10)]过滤price<10的节点
//*$..*递归匹配所有子节点

 

概览


  1. 根对象使用$来表示&#xff0c;而无需区分是对象还是数组。

  2. 表达式可以使用.&#xff0c;也可以使用[]。如&#xff1a;

    $.store.book[0].title 或 $[&#39;store&#39;][&#39;book&#39;][0][&#39;title&#39;]

  3. 表达式()可用作显式名称或索引的替代&#xff0c;如&#xff1a;

    $.store.book[(&#64;.length-1)].title 表示获取最后一个 book 的 title。

  4. 使用符号&#64;表示当前对象。过滤器表达式通过语法支持&#xff0c;?()如&#xff1a;

    $.store.book[?(&#64;.price <10)].title 表示获取价格小于 10 的所有 book 的 title。


语法

#要点&#xff1a;

  • $ 表示文档的根元素
  • &#64; 表示文档的当前元素
  • .node_name 或 [&#39;node_name&#39;] 匹配下级节点
  • [index] 检索数组中的元素
  • [start:end:step] 支持数组切片语法
  • * 作为通配符&#xff0c;匹配所有成员
  • .. 子递归通配符&#xff0c;匹配成员的所有子元素
  • () 使用表达式
  • ?()进行数据筛选

JSONPath 语法和 XPath 对比&#xff1a;

XPathJsonPath说明
/$文档根元素
.&#64;当前元素
/.[]匹配下级元素
..N/A匹配上级元素&#xff0c;JsonPath不支持此操作符
//..递归匹配所有子元素
**通配符&#xff0c;匹配下级元素
&#64;N/A匹配属性&#xff0c;JsonPath不支持此操作符
[][]下标运算符&#xff0c;根据索引获取元素&#xff0c;XPath索引从1开始&#xff0c;JsonPath索引从0开始
|[,]连接操作符&#xff0c;将多个结果拼接成数组返回&#xff0c;可以使用索引或别名
N/A[start:end:step]数据切片操作&#xff0c;XPath不支持
[]?()过滤表达式
N/A()脚本表达式&#xff0c;使用底层脚本引擎&#xff0c;XPath不支持
()N/A分组&#xff0c;JsonPath不支持

注意&#xff1a;

  • JsonPath 的索引从0开始计数
  • JsonPath 中字符串使用单引号表示&#xff0c;例如:$.store.book[?(&#64;.category&#61;&#61;&#39;reference&#39;)]中的&#39;reference&#39;

你可以在 JSONPath Online Evaluator 站点进行验证JsonPath的执行效果。

参考文档&#xff1a;

  • JSONPath - XPath for JSON
  • Querying JSON with SelectToken

 


推荐阅读
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 笔记说明重学前端是程劭非(winter)【前手机淘宝前端负责人】在极客时间开的一个专栏,每天10分钟,重构你的前端知识体系& ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • Excel技巧:单元格中显示公式而非结果的解决方法
    本文探讨了在Excel中如何通过简单的方法解决单元格显示公式而非计算结果的问题,包括使用快捷键和调整单元格格式两种方法。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • C/C++ 应用程序的安装与卸载解决方案
    本文介绍了如何使用Inno Setup来创建C/C++应用程序的安装程序,包括自动检测并安装所需的运行库,确保应用能够顺利安装和卸载。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • Python3爬虫入门:pyspider的基本使用[python爬虫入门]
    Python学习网有大量免费的Python入门教程,欢迎大家来学习。本文主要通过爬取去哪儿网的旅游攻略来给大家介绍pyspid ... [详细]
  • JavaScript 跨域解决方案详解
    本文详细介绍了JavaScript在不同域之间进行数据传输或通信的技术,包括使用JSONP、修改document.domain、利用window.name以及HTML5的postMessage方法等跨域解决方案。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
author-avatar
阮琳芷信玲俊岳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有