JSON mit JPath abfragen
Sie finden Knoten und Werte eines Dokuments über ihren Pfad, filtern die Elemente eines Arrays nach ihren Werten und suchen in beliebiger Tiefe.
Lösungsüberblick
SelectNodes gibt alle Treffer eines JPath-Ausdrucks zurück, SelectSingleNode (Kurzform JPath) den ersten Treffer
oder Nothing, Exists, ob es einen Treffer gibt. Die Get-Methoden (GetString …) lesen den ersten Treffer als
typisierten Wert. JPath folgt RFC 9535 mit den Erweiterungen und
Abweichungen, die unter Werte und Grenzen aufgeführt sind.
Umsetzung
| Ausdruck | Findet |
|---|---|
$ | Die Wurzel |
$.customer.name, $['first name'] | Einen Eintrag; eckige Klammern für Namen mit Leerzeichen oder Sonderzeichen |
$.lines[0], $.lines[-1] | Ein Element über seine Position ab 0; negative Positionen zählen vom Ende |
$.lines[*] | Alle Elemente |
$..id | Jede id in beliebiger Tiefe |
$.lines[0,2], $.lines[1:3] | Eine Auswahl, einen Bereich (Ende ausgeschlossen) |
$.lines[?@.price < 10 && @.kind == 'A'] | Elemente, deren Einträge die Bedingung erfüllen; auch [?(@.price < 10)] |
$.lines[?match(@.no, 'A-.*')] | Filterfunktionen: length, count, match, search, value |
customer.name | Ohne $: beginnend an dem Knoten, für den die Methode aufgerufen wird |
Dim line As JNode
For Each line In doc.SelectNodes("$.lines[?@.price >= 100]")
Debug.Print line.GetString("no"), line.GetCurrency("price")
Next
' A default covers both a missing key and the value null.
Debug.Print doc.GetString("$.customer.vatId", "")
Dim first As JNode
Set first = doc.SelectSingleNode("$..items[?@.stock == 0]")
If Not first Is Nothing Then Debug.Print first.Path
Hinweise
matchprüft den gesamten Wert gegen einen regulären Ausdruck,searcheinen beliebigen Teil davon. Die Muster sind reguläre Ausdrücke von .NET, nicht I-Regexp (RFC 9485); ein ungültiges Muster ergibtfalse, wie es RFC 9535 vorschreibt, und ein Muster, dessen Auswertung länger als eine Sekunde dauert, ergibt ebenfallsfalse. Siehe Werte und Grenzen.- Schlüssel unterscheiden wie in JSON zwischen Groß- und Kleinschreibung.
Existsist auch für einen SchlüsselTrue, dessen Wertnullist; eine Get-Methode ohne Ersatzwert löst dann einen Fehler aus. Lesen Sie optionale Werte mit Ersatzwert (GetString(path, "")); er deckt einen fehlenden Schlüssel undnullgleichermaßen ab.- Ein ungültiger Ausdruck löst
jePathSyntaxmit der Position des Problems aus. Patheines Knotens gibt den kanonischen Ausdruck dieser Bibliothek zurück, der den Knoten wiederfindet (Punktschreibweise, nicht die Klammerform eines Normalized Path nach RFC 9535), zum Beispiel$.lines[2].- Kompilierte Ausdrücke werden zwischengespeichert; derselbe Ausdruck in einer Schleife über viele Datensätze wird nicht jedes Mal neu geparst.
Verwandte Themen
de/wiki/msaccess/json/how-to/query-with-jpath.txt · Zuletzt geändert: von Wolfgang van der Stille