jsonPath

jsonpath implementiert Unterstützung für die SQL/JSON-Pfadsprache in PostgreSQL zur Abfrage von JSON-Daten. Sie liefert eine binäre Darstellung des geparsten SQL/JSON-Pfadausdrucks, der die Elemente angibt, die von der Pfad-Engine aus den JSON-Daten zur weiteren Verarbeitung mit den SQL/JSON-Abfragefunktionen abgerufen werden sollen. Die Semantik von SQL/JSON-Pfadprädikaten und -Operatoren folgt im Allgemeinen SQL. Die SQL/JSON-Pfadsyntax verwendet einige der JavaScript:
  • Ein Punkt (.) wird für den Zugang zu den Mitgliedern verwendet.
  • Eckige Klammern ([]) werden für den Zugriff auf das Feld verwendet.
  • SQL/JSON-Arrays sind 0-relativ (im Gegensatz zu normalen SQL-Arrays, die bei 1 beginnen).
Normalerweise wird ein SQL/JSON-Pfadausdruck in einer SQL-Abfrage als SQL-Zeichenfolgenliteral geschrieben. Das bedeutet, dass der Pfadausdruck in einfache Anführungszeichen gesetzt werden muss. Außerdem müssen alle gewünschten einfachen Anführungszeichen innerhalb des Wertes verdoppelt werden. Einige Formen von Pfadausdrücken erfordern Zeichenkettenliterale innerhalb dieser Ausdrücke. Die eingebetteten String-Literale entsprechen den JavaScript/ECMAScript:
  • Sie müssen von doppelten Anführungszeichen umgeben sein.
  • Backslash-Escapes können darin verwendet werden, um sonst schwer zu tippende Zeichen darzustellen.
Um ein doppeltes Anführungszeichen innerhalb eines eingebetteten Zeichenkettenliteral zu erhalten, müssen Sie ' \" eingeben. Um einen Backslash zu erhalten, müssen Sie ' \\ eingeben.
Andere spezielle Backslash-Sequenzen werden in JSON-Strings erkannt:
Für verschiedene ASCII-Steuerzeichen
  • \b
  • \f
  • \n
  • \r
  • \t
  • \v
Für ein Unicode-Zeichen, das durch seinen 4-hex-stelligen Codepunkt identifiziert wird
  • \uNNNN
Die Backslash-Syntax umfasst auch zwei Fälle, die bei JSON nicht zulässig sind:
Für einen Zeichencode, der mit nur zwei Hexadezimalziffern geschrieben wird
  • \xNN
Für einen mit 1 bis 6 Hexadezimalziffern geschriebenen Zeichencode
  • \u{N...}
Ein Pfadausdruck besteht aus einer Folge von Pfadelementen, die sein können:
  • Pfadliterale der primitiven JSON-Typen: Unicode-Text, numerisch, true, false oder null.
  • Pfadvariablen.
  • Accessor-Operatoren.
  • jsonpath und -Methoden, die Sie verwenden können, um Filterausdrücke bereitzustellen oder die Reihenfolge der Pfadauswertung festzulegen.

jsonpath-Variablen

$
Eine Variable, die den abzufragenden JSON-Text (das Kontextelement) darstellt.
$varname
Eine benannte Variable. Sie können den Wert über den Parameter " vars verschiedener JSON-Verarbeitungsfunktionen festlegen.
@
Eine Variable, die das Ergebnis der Pfadauswertung in Filterausdrücken darstellt.

jsonpath-Zugriffspunkte

.key
."$varname"
Ein Member-Accessor, der ein Objektmember mit dem angegebenen Schlüssel zurückgibt. Wenn der Schlüsselname eine benannte Variable ist, die mit $ beginnt oder nicht den JavaScript eines Bezeichners entspricht, muss er als Zeichenfolgenliteral in Anführungszeichen gesetzt werden.
.*
Ein Platzhalter für Mitglieder, der die Werte aller Mitglieder auf der obersten Ebene des aktuellen Objekts zurückgibt.
.**
Ein rekursiver Wildcard-Member-Accessor, der alle Ebenen der JSON-Hierarchie des aktuellen Objekts verarbeitet und alle Member-Werte zurückgibt, unabhängig von ihrer Verschachtelungsebene. Dies ist eine PostgreSQL des SQL/JSON-Standards.
.**{level}
.**{start_level to end_level}
Dasselbe wie .**, aber mit einem Filter über die Verschachtelungsebenen der JSON-Hierarchie. Verschachtelungsebenen werden als ganze Zahlen angegeben. Die Nullebene entspricht dem aktuellen Objekt. Um auf die unterste Schachtelungsebene zuzugreifen, können Sie das Schlüsselwort last verwenden. Dies ist eine PostgreSQL des SQL/JSON-Standards.
[tiefgestellt, ...]
Ein Array-Element-Accessor. subscript kann in zwei Formen angegeben werden: " index oder " start_index bis " end_index. Die erste Form gibt ein einzelnes Array-Element nach seinem Index zurück. Die zweite Form gibt ein Array-Slice durch den Bereich der Indizes zurück, einschließlich der Elemente, die den angegebenen " start_index und " end_index entsprechen.
Der angegebene " index kann sowohl eine ganze Zahl als auch ein Ausdruck sein, der einen einzelnen numerischen Wert liefert, der automatisch in eine ganze Zahl umgewandelt wird. Der Nullindex entspricht dem ersten Arrayelement. Sie können auch das Schlüsselwort last verwenden, um das letzte Arrayelement zu bezeichnen, was für die Behandlung von Arrays mit unbekannter Länge nützlich ist.
[*]
Ein Wildcard-Array-Element-Accessor, der alle Array-Elemente zurückgibt.

Die SQL/JSON-Pfadsprache

Ähnlich wie die ' XPath -Ausdrücke, die für den ' SQL auf XML verwendet werden, geben die ' SQL/JSON -Pfadausdrücke an, welche Elemente aus den ' JSON -Daten abgerufen werden sollen.

In PostgreSQL, sind Pfadausdrücke als der Datentyp ' jsonpath implementiert. Sie können alle in jsonpath beschriebenen Elemente verwenden.

JSON -Abfragefunktionen und -Operatoren übergeben den angegebenen Pfadausdruck zur Auswertung an das Pfadmodul. Wenn der Ausdruck mit den abgefragten JSON-Daten übereinstimmt, wird das entsprechende SQL/JSON-Element zurückgegeben.

Pfadausdrücke werden in der SQL/JSON-Pfadsprache geschrieben. Sie können arithmetische Ausdrücke und Funktionen enthalten. Der angegebene Ausdruck muss in einfache Anführungszeichen gesetzt werden, da Abfragefunktionen einen solchen Ausdruck als Textstring behandeln.

Ein Pfadausdruck besteht aus einer Folge von Elementen, die durch " jsonpath zugelassen sind. Der Pfadausdruck wird von links nach rechts ausgewertet. Sie können Klammern verwenden, um die Reihenfolge der Operationen zu ändern. Wenn die Auswertung erfolgreich ist, wird eine SQL/JSON-Sequenz erzeugt. Das Auswertungsergebnis wird an die JSON-Abfragefunktion zurückgegeben, die die angegebene Berechnung abschließt.

Um auf das Kontextelement (abzufragende JSON-Daten) zu verweisen, können Sie das Zeichen " $ im Pfadausdruck verwenden. Sie können dem Zeichen einen oder mehrere jsonpath-Accessors folgen lassen. Sie gehen in der JSON-Struktur Ebene für Ebene nach unten, um den Inhalt des Kontextelements abzurufen. Jeder nachfolgende Operator befasst sich mit dem Ergebnis des vorangegangenen Auswertungsschritts.

Weitere Informationen über die ' jsonpath und -Methoden finden Sie unter jsonpath