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

}

三、演示代码

@Test

public 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

回到顶部