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

 


推荐阅读
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社区 版权所有