热门标签 | 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

 


推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • IneedtofocusTextCellsonebyoneviaabuttonclick.ItriedlistView.ScrollTo.我需要通过点击按钮逐个关注Tex ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨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社区 版权所有