JSONPath入门之Snack3篇
Snack3 for java
一个微型JSON框架
基于jdk8,60kb。有序列化反序列化、解析和转换、支持 Json path 查询。
<dependency> <groupId>org.noear</groupId>
<artifactId>snack3</artifactId>
<version>3.1.5.3</version>
</dependency>
Snack3 借签了 Javascript
所有变量由 var
申明,及 Xml dom
一切都是 Node
的设计。其下一切数据都以ONode
表示,ONode
也即 One node
之意,代表任何类型,也可以转换为任何类型。
- 强调文档树的操控和构建能力
- 做为中间媒体,方便不同格式互转
- 高性能
Json path
查询(兼容性和性能很赞) - 支持
序列化、反序列化
今天用它来试一下JSONPath入门
一、JSONPath语法介绍
- 字符串使用单引号,例:["name"]
- 过滤操作用空隔号隔开,例:[?(@.type == 1)]
支持操作 说明
$
表示根元素
@
当前节点(做为过滤表达式的谓词使用)
*
通用配配符,可以表示一个名字或数字。
..
深层扫描。 可以理解为递归搜索。
.<name>
表示一个子节点
["<name>" (, "<name>")]
表示一个或多个子节点
[<number> (, <number>)]
表示一个或多个数组下标(负号为倒数)
[start:end]
数组片段,区间为[start,end),不包含end(负号为倒数)
[?(<expression>)]
过滤表达式。 表达式结果必须是一个布尔值。
支持过滤操作符 说明
==
left等于right(注意1不等于"1")
!=
不等于
<
小于
<=
小于等于
>
大于
>=
大于等于
=~
匹配正则表达式[?(@.name =~ /foo.*?/i)]
in
左边存在于右边 [?(@.size in ["S", "M"])]
nin
左边不存在于右边
支持尾部函数 说明
min()
计算数字数组的最小值
max()
计算数字数组的最大值
avg()
计算数字数组的平均值
sum()
计算数字数组的汇总值(新加的)
二、准备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
}
},
"expensive": 10
}
三、演示代码
@Testpublic void demo1(){
final String 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}},"expensive":10}";
ONode n = ONode.load(json);
ONode t1 = n.select("$.store.book [0].title");
System.out.println("
t1:" + t1);
ONode t2 = n.select("$["store"]["book"][0]["title"]");
System.out.println("
t2:" + t2);
ONode t3 = n.select("$.store.book[*].author");
System.out.println("
t3:" + t3);
ONode t4 = n.select("$..author");
System.out.println("
t4:" + t4);
ONode t5 = n.select("$.store.*");
System.out.println("
t5:" + t5);
ONode t6 = n.select("$.store..price");
System.out.println("
t6:" + t6);
ONode t7 = n.select("$..book[2]");
System.out.println("
t7:" + t7);
ONode t8 = n.select("$..book[-2]");
System.out.println("
t8:" + t8);
ONode t9 = n.select("$..book[0,1]");
System.out.println("
t9:" + t9);
ONode ta = n.select("$..book[:2]");
System.out.println("
ta:" + ta);
ONode tb = n.select("$..book[1:2]");
System.out.println("
tb:" + tb);
ONode tc = n.select("$..book[-2:]");
System.out.println("
tc:" + tc);
ONode td = n.select("$..book[2:]");
System.out.println("
td:" + td);
ONode te = n.select("$..book[?(@.isbn)]");
System.out.println("
te:" + te);
ONode tf = n.select("$.store.book[?(@.price < 10)]");
System.out.println("
tf:" + tf);
ONode tg = n.select("$..book[?(@.author =~ /.*REES/i)]");
System.out.println("
tg:" + tg);
ONode th = n.select("$..*");
System.out.println("
th:" + th);
ONode ti = n.select("$..book[?(@.price <= $.expensive)]");
System.out.println("
ti:" + ti);
}
四、控制台输出
t1:"Sayings of the Century"t2:"Sayings of the Century"
t3:["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
t4:["Nigel Rees","Evelyn Waugh","Herman Melville","J. R. R. Tolkien"]
t5:[[{"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}],{"color":"red","price":19.95}]
t6:[8.95,12.99,8.99,22.99,19.95]
t7:[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
t8:[{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
t9:[{"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}]
ta:[{"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}]
tb:[{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99}]
tc:[{"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}]
td:[{"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}]
te:[{"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}]
tf:[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
tg:[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95}]
th:[{"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}},[{"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}],{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},"reference","Nigel Rees","Sayings of the Century",8.95,{"category":"fiction","author":"Evelyn Waugh","title":"Sword of Honour","price":12.99},"fiction","Evelyn Waugh","Sword of Honour",12.99,{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99},"fiction","Herman Melville","Moby Dick","0-553-21311-3",8.99,{"category":"fiction","author":"J. R. R. Tolkien","title":"The Lord of the Rings","isbn":"0-395-19395-8","price":22.99},"fiction","J. R. R. Tolkien","The Lord of the Rings","0-395-19395-8",22.99,{"color":"red","price":19.95},"red",19.95,10]
ti:[{"category":"reference","author":"Nigel Rees","title":"Sayings of the Century","price":8.95},{"category":"fiction","author":"Herman Melville","title":"Moby Dick","isbn":"0-553-21311-3","price":8.99}]
以上是 JSONPath入门之Snack3篇 的全部内容, 来源链接: utcz.com/z/511228.html