前面介绍了 JsonPath 提供的过滤操作符,下面将给出一些示例,供读者参考。
下面示例演示 >(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)和 !=(不等于)比较操作符的用法,代码如下:
package com.hxstrive.json_path.filter;
import com.jayway.jsonpath.JsonPath;
/**
* >、>=、<、<=、==、!= 过滤器
* @author hxstrive.com
*/
public class FilterDemo02 {
public static void main(String[] args) {
String json = "{" +
" \"store\": {" +
" \"book\": [" +
" {" +
" \"title\": \"Sayings of the Century\"," +
" \"price\": 8.95" +
" }," +
" {" +
" \"title\": \"Sword of Honour\"," +
" \"price\": 12.99" +
" }," +
" {" +
" \"title\": \"Moby Dick\"," +
" \"price\": 8.99" +
" }," +
" {" +
" \"title\": \"The Lord of the Rings\"," +
" \"price\": 22.99" +
" }" +
" ]" +
" }," +
" \"expensive\": 10" +
"}";
// [{"title":"Sayings of the Century","price":8.95}]
Object obj = JsonPath.read(json, "$.store.book[*][?(@.price < 8.99)]");
System.out.println(obj);
// [{"title":"Sayings of the Century","price":8.95},{"title":"Moby Dick","price":8.99}]
obj = JsonPath.read(json, "$.store.book[*][?(@.price <= 8.99)]");
System.out.println(obj);
// [{"title":"The Lord of the Rings","price":22.99}]
obj = JsonPath.read(json, "$.store.book[*][?(@.price > 12.99)]");
System.out.println(obj);
// [{"title":"Sword of Honour","price":12.99},{"title":"The Lord of the Rings","price":22.99}]
obj = JsonPath.read(json, "$.store.book[*][?(@.price >= 12.99)]");
System.out.println(obj);
// [{"title":"Sword of Honour","price":12.99}]
obj = JsonPath.read(json, "$.store.book[*][?(@.price == 12.99)]");
System.out.println(obj);
// [{"title":"Sayings of the Century","price":8.95},{"title":"Moby Dick","price":8.99},{"title":"The Lord of the Rings","price":22.99}]
obj = JsonPath.read(json, "$.store.book[*][?(@.price != 12.99)]");
System.out.println(obj);
}
}下面示例演示 in(判断值在指定的集合中)和 nin(判断值不在指定的集合中)操作符,代码如下:
package com.hxstrive.json_path.filter;
import com.jayway.jsonpath.JsonPath;
/**
* in、nin 过滤器
* @author hxstrive.com
*/
public class FilterDemo03 {
public static void main(String[] args) {
String json = "{" +
" \"store\": {" +
" \"book\": [" +
" {" +
" \"title\": \"Java\"," +
" \"price\": 8.95" +
" }," +
" {" +
" \"title\": \"C#\"," +
" \"price\": 12.99" +
" }," +
" {" +
" \"title\": \"C++\"," +
" \"price\": 8.99" +
" }," +
" {" +
" \"title\": \"PHP\"," +
" \"price\": 22.99" +
" }" +
" ]" +
" }," +
" \"expensive\": 10" +
"}";
// [{"title":"Java","price":8.95},{"title":"C#","price":12.99}]
Object obj = JsonPath.read(json, "$.store.book[*][?(@.title in ['Java', 'C#'])]");
System.out.println(obj);
// [{"title":"C++","price":8.99},{"title":"PHP","price":22.99}]
obj = JsonPath.read(json, "$.store.book[*][?(@.title nin ['Java', 'C#'])]");
System.out.println(obj);
}
}下面示例演示集合的子集、交集操作符,代码如下:
package com.hxstrive.json_path.filter;
import com.jayway.jsonpath.JsonPath;
/**
* subsetof、anyof、noneof 过滤器
* @author hxstrive.com
*/
public class FilterDemo04 {
public static void main(String[] args) {
String json = "{" +
" \"store\": {" +
" \"book\": [" +
" {" +
" \"interests\": [\"足球\",\"登山\"]," +
" \"username\": \"Tom\"" +
" }," +
" {" +
" \"interests\": [\"篮球\",\"跑步\"]," +
" \"username\": \"Helen\"" +
" }," +
" {" +
" \"interests\": [\"篮球\",\"游泳\"]," +
" \"username\": \"Bill\"" +
" }," +
" {" +
" \"interests\": [\"攀岩\",\"跳伞\"]," +
" \"username\": \"Any\"" +
" }" +
" ]" +
" }," +
" \"expensive\": 10" +
"}";
// [{"interests":["篮球","跑步"],"username":"Helen"}]
Object obj = JsonPath.read(json, "$.store.book[*][?(@.interests subsetof ['篮球', '跑步'])]");
System.out.println(obj);
// [{"interests":["篮球","跑步"],"username":"Helen"},{"interests":["篮球","游泳"],"username":"Bill"}]
obj = JsonPath.read(json, "$.store.book[*][?(@.interests anyof ['篮球', '跑步'])]");
System.out.println(obj);
// [{"interests":["足球","登山"],"username":"Tom"},{"interests":["攀岩","跳伞"],"username":"Any"}]
obj = JsonPath.read(json, "$.store.book[*][?(@.interests noneof ['篮球', '跑步'])]");
System.out.println(obj);
}
}下面示例演示 size 操作符,判断数组的长度,代码如下:
package com.hxstrive.json_path.filter;
import com.jayway.jsonpath.JsonPath;
/**
* size 过滤器
* @author hxstrive.com
*/
public class FilterDemo01 {
public static void main(String[] args) {
String json = "{" +
" \"store\": {" +
" \"book\": [" +
" [1,2,3,4]," +
" [1,2,3]," +
" [1,2]," +
" [5,6,7]" +
" ]," +
" \"bicycle\": {" +
" \"color\": \"red\"," +
" \"price\": 19.95" +
" }" +
" }," +
" \"expensive\": 10" +
"}";
// 匹配成功,返回 [[1,2,3],[5,6,7]]
Object obj = JsonPath.read(json, "$.store[*][?(@ size 3)]");
System.out.println(obj);
// 匹配成功,返回 [[1,2,3,4]]
obj = JsonPath.read(json, "$.store.book[?(@ size 4)]");
System.out.println(obj);
}
}