2016-11-08 5 views
0

Unten ist die Probe json aus den tutorial&& Operator in 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 
} 

ich für die Objekte mit der folgenden Bedingung

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

die retrivd mich zu sehen versuche, wie gezeigt haben sollte unten. Aber es zeigt nur [].

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

Gibt es irgendwelche Hinweise, wo in der Abfrage der Fehler ist?

Antwort

2

sollten Sie || anstelle von &&, da Sie Objekte wollen mit entweder Preis (nicht beide, was unmöglich ist):

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

Ich versuche, eine IF-THEN-Anweisung zu bauen. was tun, wenn beide vorhanden sind? – Betafish

+0

Meine Antwort erzeugt die Ergebnisse, die Ihre Frage lautete. Versuchen Sie eine andere Frage zu stellen? Wenn ja, bitte eine neue Frage öffnen. – cybersam

+0

Vielleicht war ich beim ersten Mal nicht klar. Ich habe die Abfrage jetzt geändert. Können Sie sehen, wie ich die Abfrage in einer solchen Situation ändern könnte? – Betafish

1

Ich glaube, Sie falsch verstanden, wie die & & Betreiber arbeiten. Wenn ich verstehe, was Sie wollen, suchen Sie das Objekt (mit allen Feldern in), wo das Feld "Preis" gleich 12,99 ist und das Objekt (mit allen Feldern in), wo das Feld "Titel" gleich Moby Dick ist.

Aber wenn Sie $..[?(@.price == 12.99 && @.title == 'Moby Dick')] eingeben, suchen Sie jedes Objekt, wo eines seiner Felder mit dem Namen "Preis" gleich 12,99 ist und in diesem gleichen Objekt ein anderes Feld namens "Titel" ist gleich Moby Dick.

Und keines dieser Objekte hat diese beiden Bedingungen erfüllt. Also die Antwort ist [] (kein Objekt gefunden oder keine Übereinstimmung)

Um das richtige Ergebnis zu erhalten, durchsuchen Sie dieses Objekt nicht mit und dieses Objekt mit aber das Objekt (e) mit diesem Feld entspricht OR (| | operator) das Objekt (e) mit diesem anderen Feld gleich ist.

So ist die Antwort von cybersam ist die richtige Antwort programmatisch

Ich hoffe, das ist klar und hilft