[javascript] Gibt es ein JSON-Äquivalent von XQuery / XPath?



6 Answers

Ich denke JSONQuery ist eine Obermenge von JSONPath und ersetzt diese somit im Dojo . Dann gibt es auch RQL .

Aus der Dojo-Dokumentation:

JSONQuery ist eine erweiterte Version von JSONPath mit zusätzlichen Funktionen für Sicherheit, Benutzerfreundlichkeit und eine umfassende Reihe von Datenabfrage-Tools einschließlich Filterung, rekursive Suche, Sortierung, Zuordnung, Bereichsauswahl und flexible Ausdrücke mit Wildcard-String-Vergleiche und verschiedene Operatoren.

JSONselect hat eine andere Sichtweise auf die Frage (CSS-Selector-like, anstatt XPath) und hat eine JavaScript-Implementierung .

Question

Bei der Suche nach Elementen in komplexen JSON-Arrays und Hashes wie:

[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [
            // etc.
        }]
    }
]

Gibt es eine Art von Abfragesprache, die ich verwenden kann, um ein Objekt in [0].objects where id = 3 ?




Gibt es eine Art Abfragesprache?

jq definiert eine Sprache, die JSONPath sehr ähnlich ist - siehe https://github.com/stedolan/jq/wiki/For-JSONPath-users

... [welchen] kann ich einen Gegenstand in [0] .Objekten finden, wo id = 3?

Ich nehme an, dies bedeutet: Finden Sie alle JSON-Objekte unter dem angegebenen Schlüssel mit id == 3, egal wo das Objekt sein kann. Eine entsprechende jq-Abfrage wäre:

.[0].objects | .. | objects | select(.id==3)

wo "|" ist der Pipe-Operator (wie in Kommando-Shell-Pipes) und das Segment ".. | objects" entspricht "egal wo das Objekt sein darf".

Die Grundlagen von jq sind größtenteils offensichtlich oder intuitiv oder zumindest ziemlich einfach, und der Rest ist leicht zu erlernen, wenn Sie mit Kommandozeilenpipes vertraut sind. Die jq FAQ enthält Hinweise zu Tutorials und ähnlichem.

jq ist auch wie SQL, da es CRUD-Operationen unterstützt, obwohl der jq-Prozessor seine Eingabe niemals überschreibt. jq kann auch Ströme von JSON-Entitäten verarbeiten.

Zwei weitere Kriterien, die Sie bei der Beurteilung einer JSON-orientierten Abfragesprache berücksichtigen sollten, sind:

  • unterstützt es reguläre Ausdrücke? (jq 1.5 hat umfassende Unterstützung für PCRE Regex)
  • Ist es Turing-vollständig? (ja)



Versuchen Sie, JSPath

JSPath ist eine domänenspezifische Sprache (DSL), mit der Sie in Ihren JSON-Dokumenten navigieren und nach Daten suchen können. Mit JSPath können Sie Elemente von JSON auswählen, um die darin enthaltenen Daten abzurufen.

JSPath für JSON wie ein XPath für XML.

Es ist stark sowohl für Node.js als auch für moderne Browser optimiert.




Wenn Sie wie ich sind und Sie nur pfadbasierte _.get() ausführen _.get() , aber sich nicht um echten XPath kümmern, kann lodashs _.get() funktionieren. Beispiel aus lodash docs:

var object = { 'a': [{ 'b': { 'c': 3 } }] };

_.get(object, 'a[0].b.c');
// → 3

_.get(object, ['a', '0', 'b', 'c']);
// → 3

_.get(object, 'a.b.c', 'default');
// → 'default'



XQuery kann verwendet werden, um JSON abzufragen, sofern der Prozessor JSON-Unterstützung bietet. Dies ist ein einfaches Beispiel, wie mit BaseX Objekte mit "id" = 1 gefunden werden können:

json:parse('[
    { "id": 1, "name": "One", "objects": [
        { "id": 1, "name": "Response 1", "objects": [ "etc." ] }
    ]}
]')//value[.//id = 1]



ObjectPath ist eine Abfragesprache, die XPath oder JSONPath ähnelt, aber dank eingebetteter arithmetischer Berechnungen, Vergleichsmechanismen und integrierter Funktionen viel leistungsfähiger ist. Siehe die Syntax:

Finden Sie im Geschäft alle Schuhe der roten Farbe und Preis von weniger als 50

$ .. Schuhe. * [Farbe ist "rot" und Preis <50]




Json Pointer scheint auch immer mehr Unterstützung zu bekommen.




Related