美文网首页
2,JsonPath入门实战

2,JsonPath入门实战

作者: lcjyzm | 来源:发表于2022-07-21 16:48 被阅读0次

    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);
        }
    }
    
    

    注意: 以上代码打开注释即可执行

    相关文章

      网友评论

          本文标题:2,JsonPath入门实战

          本文链接:https://www.haomeiwen.com/subject/yrauirtx.html