&安培;&安培; JSONpath中的运算符()

时间:2016-11-08 01:35:23

标签: java json jsonpath

以下是来自tutorial

的示例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
}

我正在尝试检查具有以下条件的对象

$..[?(@.price == 12.99 && @.title == 'Moby Dick')]

应该如下所示对我进行检查。但是,它只显示[]。

{
                "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
            },

关于查询中哪里出现错误的任何指针?

2 个答案:

答案 0 :(得分:2)

你应该使用||代替&&,因为你想要任何价格的对象(不是两者,这是不可能的):

$..[?(@.price == 12.99 || @.price == 8.99)]

答案 1 :(得分:1)

我认为你误解了&& amp;运营商。如果我理解你想要的东西,你可以搜索字段“price”等于12.99“的对象(包含所有字段)和”字段“title”等于Moby Dick的对象(包含所有字段)。

但是当你输入$..[?(@.price == 12.99 && @.title == 'Moby Dick')]时,你搜索每个对象,其中一个名为“price”的字段等于12.99,在同一个对象中,另一个名为“title”的字段等于Moby Dick。

这些对象都没有满足这两个条件。所以答案是[](找不到对象或没有匹配)

要获得正确的结果,不要使用和此对象搜索此对象,但具有此字段的对象等于OR(||运算符)具有此其他字段的对象等于。

所以cybersam的答案是以编程方式正确的答案

我希望这很清楚并且有帮助