以下是来自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
},
关于查询中哪里出现错误的任何指针?
答案 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的答案是以编程方式正确的答案
我希望这很清楚并且有帮助