2,JsonPath入门实战
2022-07-21 本文已影响0人
lcjyzm
1,json例子数据
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
}
2,最新maven坐标:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.7.0</version>
</dependency>
3,Java代码
package com.lcj.jsonpath;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.lang.Console;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import org.junit.Before;
import org.junit.Test;
/**
* <p>
* 使用jsonpath查询json字符串数据
* </p>
* * @author: liuchangjun
* @since: 2022/7/15 12:04
*/public class JsonPathDemoTest {
/**
* 从资源文件中读取json数据
*/
private Object document;
@Before
public void init() {
// 读取资源下面的json文件
String jsonData = ResourceUtil.readUtf8Str("jsonpath_test_data.json");
// Console.log("json data: {}",jsonData);
document = Configuration.defaultConfiguration().jsonProvider().parse(jsonData);
}
@Test
public void test() {
// 所有书的作者
// $.store.book[*].author <=> $['store']['book'][*]['author']
// List<String> allBookAuthors = JsonPath.read(document,"$.store.book[*].author");
// Console.log(allBookAuthors);
// 所有的作者
// $..author <=> $..['author']
// List<String> allAuthors = JsonPath.read(document,"$..author");
// Console.log(allAuthors);
// store下所有的子节点,包含 book 和 bicycle
// $.store.* <=> $['store'][*]
// List<Object> list = JsonPath.read(document,"$.store.*");
// Console.log(list);
// 所有的价格
// $.store..price
// List<Double> allPrice = JsonPath.read(document,"$.store..price");
// Console.log(allPrice);
// 第三本书 数组索引从0开始
// $..book[2] <=> $..['book'][2]
// List<Object> thirdBook = JsonPath.read(document, "$..book[2]");
// Console.log(thirdBook);
// 倒数第二本书 数组逆序索引从-1开始
// $..book[-2] <=> $..['book'][-2]
// List<Object> lastSecondBook = JsonPath.read(document, "$..book[-2]");
// Console.log(lastSecondBook);
// 前2本书
// $..book[0,1] <=> $..['book'][0,1]
// List<Object> twoBooks = JsonPath.read(document, "$..book[0,1]");
// Console.log(twoBooks);
// 从索引0开始到索引2(不包含)
// $..book[:2]
// List<Object> list = JsonPath.read(document, "$..book[:2]");
// Console.log(list);
// $..book[1:2]
// List<Object> list = JsonPath.read(document, "$..book[1:2]");
// Console.log(list);
// 最后2本书
// $..book[-2:]
// List<Object> list = JsonPath.read(document, "$..book[-2:]");
// Console.log(list);
// $..book[2:]
// List<Object> list = JsonPath.read(document, "$..book[2:]");
// Console.log(list);
// 包含isbn的book
// $..book[?(@.isbn)]
// List<Object> list = JsonPath.read(document, "$..book[?(@.isbn)]");
// Console.log(list);
// 书的价格小于10
// $.store.book[?(@.price < 10)]
// List<Object> list = JsonPath.read(document, "$..book[?(@.price < 10)]");
// Console.log(list);
// 书的价格小于 $['expensive']
// $..book[?(@.price <= $['expensive'])] <=> $..book[?(@.price <= $.expensive)]
// List<Object> list = JsonPath.read(document, "$..book[?(@.price <= $.expensive)]");
// Console.log(list);
// 所有book的作者匹配正则 /.*REES/i 忽略大小写
// $..book[?(@.author =~ /.*REES/i)]
// List<Object> list = JsonPath.read(document, "$..book[?(@.author =~ /.*REES/i)]");
// Console.log(list);
// 将json字符串解析为一个个单值
// $..*
// List<Object> list = JsonPath.read(document, "$..*");
// Console.log(list);
// book的数量
// $..book.length()
int len = JsonPath.read(document, "$..book.length()");
// 4
Console.log(len);
}
}
注意: 以上代码打开注释即可执行