5,JsonPath进阶实战--默认配置

本文介绍了JsonPath的四种核心配置:DEFAULT_PATH_LEAF_TO_NULL、ALWAYS_RETURN_LIST、SUPPRESS_EXCEPTIONS和REQUIRE_PROPERTIES,以及如何通过自定义CacheAPI实现路径缓存。还深入探讨了默认缓存实现和关键配置项的作用。
摘要由CSDN通过智能技术生成

1,修改默认行为

1.1,DEFAULT_PATH_LEAF_TO_NULL
默认:


@Test  
public void defaultLeafToNull(){  
    // 使用默认配置  
    Configuration conf = Configuration.defaultConfiguration();  
  
    // json数据book[2]有字段 isbn    String isbn2 = JsonPath.using(conf).parse(jsonData).read("$.store.book[2].isbn");  
    Console.log(isbn2);  
    // 0-553-21311-3  
  
    // json数据book[0]没有字段 isbn    String isbn0 = JsonPath.using(conf).parse(jsonData).read("$.store.book[0].isbn");  
    Console.log(isbn0);  
    // com.jayway.jsonpath.PathNotFoundException: No results for path: $['store']['book'][0]['isbn']  
}

在这里插入图片描述

DEFAULT_PATH_LEAF_TO_NULL配置让没有"叶子"的返回null


@Test  
public void defaultLeafToNull2(){  
    Configuration configuration = Configuration.defaultConfiguration().addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL);  
    // json数据book[2]有字段 isbn    String isbn2 = JsonPath.using(configuration).parse(jsonData).read("$.store.book[2].isbn");  
    Console.log(isbn2);  
  
    // json数据book[0]没有字段 isbn    String isbn0 = JsonPath.using(configuration).parse(jsonData).read("$.store.book[0].isbn");  
    Console.log(isbn0);  
}

在这里插入图片描述

1.2,ALWAYS_RETURN_LIST
默认:

@Test  
public void defaultReturnList(){  
    // 使用默认配置  
    Configuration conf = Configuration.defaultConfiguration();  
  
    // json数据book[2]有字段 isbn    String isbn2 = JsonPath.using(conf).parse(jsonData).read("$.store.book[2].isbn");  
    Console.log(isbn2);  
}

在这里插入图片描述

ALWAYS_RETURN_LIST配置让JsonPath返回结果总是为List,即使查询路径是明确的.


@Test  
public void defaultReturnList2(){  
    Configuration configuration = Configuration.defaultConfiguration().addOptions(Option.ALWAYS_RETURN_LIST);  
    // json数据book[2]有字段 isbn    List<String> isbn2 = JsonPath.using(configuration).parse(jsonData).read("$.store.book[2].isbn");  
    Console.log(isbn2);  
}

在这里插入图片描述
在这里插入图片描述

1.3,SUPPRESS_EXCEPTIONS
SUPPRESS_EXCEPTIONS此选项确保不从路径计算传播异常。它遵循以下简单的规则:

  • 如果选项’ ALWAYS_RETURN_LIST '存在,返回一个空列表
  • 如果选项’ ALWAYS_RETURN_LIST '不存在,返回null

1.4,REQUIRE_PROPERTIES
默认:

@Test  
public void defaultRequiredProperties2(){  
    Configuration configuration = Configuration.defaultConfiguration().addOptions(Option.REQUIRE_PROPERTIES);  
  
    List<String> isbns = JsonPath.using(configuration).parse(jsonData).read("$.store.book[*].isbn");  
    Console.log(isbns);  
}

在这里插入图片描述

REQUIRE_PROPERTIES该选项将JsonPath配置为在计算“不定”路径时要求path中定义的属性必须存在。


@Test  
public void defaultRequiredProperties2(){  
    Configuration configuration = Configuration.defaultConfiguration().addOptions(Option.REQUIRE_PROPERTIES);  
  
    List<String> isbns = JsonPath.using(configuration).parse(jsonData).read("$.store.book[*].isbn");  
    Console.log(isbns);  
}

在这里插入图片描述

2,JsonPath中缓存自定义

2.1,Cache API介绍

在JsonPath 2.1.0中引入了一种新的Cache SPI。允许API使用者以适合的方式配置路径缓存。在首次访问缓存或引发JsonPathException之前,必须对其进行配置。
JsonPath 附带了2中缓存实现:

  • com.jayway.jsonpath.spi.cache.LRUCache (default, thread safe)
  • com.jayway.jsonpath.spi.cache.NOOPCache (no cache)
2.2,实现自定义的缓存API
CacheProvider.setCache(new Cache() {
    //Not thread safe simple cache
    private Map<String, JsonPath> map = new HashMap<String, JsonPath>();

    @Override
    public JsonPath get(String key) {
        return map.get(key);
    }

    @Override
    public void put(String key, JsonPath jsonPath) {
        map.put(key, jsonPath);
    }
});
2.3,JsonPath默认缓存实现源码

JsonContext
在这里插入图片描述

线程安全原因
在这里插入图片描述

默认实现
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值