JSON PATH字段NULL检查表达式 - java

我有一个像bellow的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,
            "likes": 1
        },
        {
            "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}

我试图找到没有喜欢字段的所有书籍价格。是否可以使用Jayway Json Path library查找。我正在尝试类似$.store.book[? (@.likes == null)].price的方法,但我不知道是否存在类似的方法?

参考方案

这个jsonpath表达式是正确的:

$.store.book[?(@.likes == null)].price

但是您必须设置DEFAULT_PATH_LEAF_TO_NULL,例如:

Configuration conf = Configuration.defaultConfiguration()
    .addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL);

String pricesForBooksWithNoLikes = JsonPath.using(conf).parse(json)
    .read("$.store.book[?(@.likes == null)].price");

更多详细信息in the docs。

这是一个屏幕截图,显示了使用Jayway JsonPath Evaluator的这种读取方式:

JSON PATH字段NULL检查表达式 - java

Java Map,如何将UTF-8字符串正确放置到地图? - java

我有一个地图,LinkedHashMap更确切地说。我想在上面放一个字符串对象。然后,我读取此值以查看实际存储的内容。字符串本身具有非ASCII字符(西里尔文,韩文等)。将其放到地图上然后阅读后,这些字符将替换为??? s。一些代码:Map obj = new LinkedHashMap(); System.out.println("name: &…

使用杰克逊映射未命名的数组 - java

在未指定游标的情况下点击twitter friends/ids API端点将返回以下JSON响应:["243439460","13334762", "14654522"]但是,在指定游标时,您会得到记录的格式:{"next_cursor":0,"previous_cur…

如何将JSON读取到Java中的通用对象列表? - java

我必须从Web服务获取数据,我正在使用Jackson,但在使用Gson时遇到了同样的问题,单个对象没有问题,但是当我收到多个对象列表时,这对我来说并不那么容易。收到的JSON如下所示:{"country": [ {"code":"AD","nombre":"Andorr…

使用Jackson将JSON字符串或对象反序列化为String字段 - java

我正在使用Jackson 2库,并且尝试读取JSON响应,如下所示:{ "value":"Hello" } 当value为空时,JSON响应如下所示:{ "value":{} } 我的模型POJO类看起来像这样public class Hello { private String value; pu…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…