2016-11-08 236 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的答案是正確的答案編程

我希望這是明確的,並有助於