2016-11-08 195 views
0

下面是从tutorial&&运营商JSONpath()

{ 
    "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')] 

应该有retrivd我要检查的对象样本JSON如图所示下面。但是,它只显示[]。

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

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

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

我试图建立一个IF-THEN语句。其中,如果他们都在那里,做点什么? – Betafish

+0

我的答案产生的结果你的问题说你想。你想问一个不同的问题吗?如果是这样,请开一个新的问题。 – cybersam

+0

可能是我第一次不清楚。我现在修改了查询。你能看到我在这种情况下如何改变查询。 – Betafish

1

我想你误会了是如何工作的& &操作。如果我明白你想要什么,你可以搜索字段“price”等于12.99的对象(包含所有字段)和“字段”title“等于Moby Dick的对象(包含所有字段)。

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

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

为了得到正确的结果,您不要使用此对象搜索此对象,但使用此对象的对象等于或(| |运算符)与此其他字段相同的对象。

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

我希望这是明确的,并有助于