JSONPath入门及测试

JSONPath入门

JSONPath - 是xpath在json的应用,是参照xpath表达式来解析XML文档的方式。JSONPath用'$'来表示最外层对象

XPath的表达式:

/store/book[1]/title

x.store.book[0].title

x['store']['book'][0]['title']

JSONPath的表达式:

$.store.book[0].title

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

JSONPath可以使用通配符*表示所有的子元素名和数组索引,使用'@'来表示当前对象,?(<判断表达式>)使用逻辑表达式来过滤。

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

XPath和JSONPath的不同点:

· []在xpath表达式总是从前面的路径来操作数组,索引是从1开始。

· 使用JSONPath的[]操作符操作一个对象或数组,索引是从0开始。

XPathJSONPathDescription

/$表示根元素

.@ 当前元素

/. or []子元素

..n/a父元素

//..递归下降,JSONPath是从E4X借鉴的。

**通配符,表示所有的元素

@n/a 属性访问字符

[][]子元素操作符

|[,]连接操作符在XPath 结果合并其它结点集合。JSONP允许name或者数组索引。

n/a[start:end:step]数组分割操作从ES4借鉴。

[]?()应用过滤表示式

n/a()脚本表达式,使用在脚本引擎下面。

()n/aXpath分组

eg:

{

"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

}

},

"expensive": 10

}

XPath                                                      JSONPath

//*                                                              $..*                                 所有元素

//book[isbn]                                         $..book[?(@.isbn)]              过滤出所有的包含isbn的书

//book[price<10]                                 $..book[?(@.price<10)]       过滤出价格低于10的书

//book[3]                                              $..book[2]                           第三个书

//book[last()]                                        $..book[(@.length-1)]         最后一本书

//author                                               $..author                             所有的作者

/store/*                                                $.store.*                              store 的所有元素

/store/book/author                             $.store.book[*].author        所有书的作者

//book[position()<3]                           $..book[0,1]/$..book[:2]      前面的两本书

1、author=Evelyn Waugh

$..book[1].author

2、color = red

$..bicycle.color

3、expensive = 10

$.expensive

4、获取"author":"J.R.R.Tolkien"的price

$..book[?(@.author=='J. R. R. Tolkien')].price

创建maven项目测试一下:

1、POM里导入:

com.jayway.jsonpath

json-path

2.4.0

org.apache.commons

commons-io

1.3.2

org.slf4j

slf4j-nop

1.7.2

2、将上面例子中的json保存为json文件放到resources

3、执行如下代码:

import com.jayway.jsonpath.JsonPath;

import org.apache.commons.io.FileUtils;

import java.io.File;

import java.io.IOException;

import java.util.List;

public class jspath {

public static void main(String[] args)throws IOException {

File file =new File(jspath.class.getClassLoader().getResource("a.json").getPath());

String json = FileUtils.readFileToString(file);

List authors = JsonPath.read(json, "$..bicycle[?(@.color=='red')]"); // 修改JSONPath的内容测试结果是否一致

System.out.println(authors);

}

}

你可能感兴趣的:(JSONPath入门及测试)