jsonpath语法

工作需要,刚开始学习java爬虫之类的知识。在看了N多个框架之后决定使用webmagic这个作为项目使用框架。

在学习的过程中,有些解析的内容就是一个json字符串,就百度很多篇关于解析json字符串的方法,需要用到的就是jsonpath类似于xpath。


 JSONPath表达式

JSONPath表达式始终引用JSON结构,其方式与XPath表达式与XML文档结合使用的方式相同。由于JSON结构通常是匿名的,并且不一定具有“根成员对象”,因此JSONPath假定$分配给外部对象的抽象名称。

JSONPath表达式可以使用 . 表示

$.store.book[0].title

括号  表示

$['store']['book'][0]['title']

输入路径。内部或输出路径将始终转换为更一般的括号 -注释。

JSONPath允许通配符 *用于成员名称和数组索引。它借用后代从操作者“..” E4X阵列切片语法提案[start:end:step]EcmaScript的4

底层脚本语言的表达式(<expr>)可用作显式名称或索引的替代,如

$.store.book[(@.length-1)].title

使用符号'@'表示当前对象。过滤器表达式通过语法支持,?(<boolean expr>)

$.store.book[?(@.price < 10)].title

以下是JSONPath语法元素与其XPath对应物的完整概述和并排比较。

XPath  JSONPathDescription
/$从根节点选取。
.@选取当前节点。
/. or []child operator
..n/a选取当前节点的父节点。
//..从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
**匹配任何元素节点。
@n/a属性访问。JSON结构没有属性。
[][]下标运算符。XPath使用它来迭代元素集合和谓词。在Javascript和JSON中,它是本机数组运算符。
|[,]XPath中的Union运算符导致节点集的组合。JSONPath允许使用备用名称或数组索引作为集合。
n/a[start:end:step]从ES4借来的数组切片运算符。
[]?()应用过滤器(脚本)表达式。
n/a()脚本表达式,使用底层脚本引擎。
()n/a在Xpath中分组

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XPath还有很多东西可以提供(位置修补,不是缩写语法,运算符和函数),而不是这里列出的。此外,下标运算符在Xpath和JSONPath中的工作方式存在显着差异。

  • XPath表达式中的方括号始终在由前一个路径片段生成的节点集上运行。指数总是从1开始。
  • 使用JSONPath方括号对前一个路径片段寻址的对象数组进行操作。指数总是从0开始。

例子:


{ "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
    }
  }
}

 针对上面的json串做一个xpath与jsonpath的语法比较

XPathJSONPath描述
/store/book/author$.store.book[*].author商店里所有书籍的作者
//author$..author所有作者
/store/*$.store.*商店里的所有东西,都是一些书和一辆红色的自行车。
/store//price$.store..price商店里一切的价格。
//book[3]$..book[2]第三本书
//book[last()]$..book[(@.length-1)]
$..book[-1:]
最后一本书。
//book[position()<3]$..book[0,1]
$..book[:2]
前两本书
//book[isbn]$..book[?(@.isbn)]用isbn number过滤所有书籍
//book[price<10]$..book[?(@.price<10)]过滤所有便宜10以上的书籍
//*$..*XML文档中的所有元素。JSON结构的所有成员。

 

原文内容:http://goessner.net/articles/JsonPath/

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值