JSONpath () 中的 && 运算符

&& operator in 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
            },

关于查询中错误位置的任何指示?

您应该使用 || 而不是 &&,因为您想要的对象具有任一价格(不是两者,这是不可能的):

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

我认为您误解了 && 运算符的工作原理。如果我明白你想要什么,你搜索字段 "price" 等于 12.99 "and" 的对象(包含所有字段) 字段 "title" 的对象(包含所有字段)等于白鲸记。

但是当您键入 $..[?(@.price == 12.99 && @.title == 'Moby Dick')] 时,您搜索每个对象,其中一个名为 "price" 的字段等于 12.99,而在同一对象中另一个名为 "title" 的字段等于白鲸.

此对象的

和none满足这两个条件。所以答案是 [](未找到对象或不匹配)

要获得正确的结果,您不搜索此对象和此对象,但此字段的对象等于 OR(|| 运算符)其他字段的对象等于到.

所以 cybersam 的答案是程序化的正确答案

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