Arbeiten mit JSONPath - Entwicklerhandbuch für Amazon Kinesis Data Analytics for SQL Applications

Für neue Projekte empfehlen wir, den neuen Managed Service für Apache Flink Studio anstelle von Kinesis Data Analytics for SQL Applications zu verwenden. Der Managed Service für Apache Flink Studio kombiniert Benutzerfreundlichkeit mit fortschrittlichen Analysefunktionen, sodass Sie in wenigen Minuten anspruchsvolle Anwendungen zur Stream-Verarbeitung erstellen können.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Arbeiten mit JSONPath

Anmerkung

Nach dem 12. September 2023 können Sie keine neuen Anwendungen mit Kinesis Data Firehose als Quelle erstellen, wenn Sie Kinesis Data Analytics für SQL nicht bereits verwenden. Weitere Informationen finden Sie unter Limits.

JSONPath ist eine standardisierte Methode zur Abfrage von Elementen eines JSON-Objekts. JSONPath verwendet Pfadausdrücke, um Elemente, verschachtelte Elemente und Arrays in einem JSON-Dokument zu navigieren. Weitere Informationen über JSON finden Sie auf der Website Introducing JSON.

Amazon Kinesis Data Analytics identifiziert anhand von JSONPath-Ausdrücken im Quellschema der Anwendung Datenelemente in einer Streaming-Quelle, die Daten im JSON-Format enthält.

Weitere Informationen dazu, wie Sie Streaming-Daten dem Eingabestream Ihrer Anwendung zuordnen, finden Sie unter Zuweisung von Streaming-Quellenelementen zu SQL-Eingabespalten.

Zugriff auf JSON-Elemente mit JSONPath

In den folgenden Abschnitten erfahren Sie, wie Sie JSONPath-Ausdrücke für den Zugriff auf verschiedene Elemente in JSON-formatierten Daten verwenden. Die Beispiele in diesem Abschnitt gehen davon aus, dass der Quell-Stream den folgenden JSON-Datensatz enthält:

{ "customerName":"John Doe", "address": { "streetAddress": [ "number":"123", "street":"AnyStreet" ], "city":"Anytown" } "orders": [ { "orderId":"23284", "itemName":"Widget", "itemPrice":"33.99" }, { "orderId":"63122", "itemName":"Gadget", "itemPrice":"22.50" }, { "orderId":"77284", "itemName":"Sprocket", "itemPrice":"12.00" } ] }

Zugriff auf JSON-Elemente

Um ein Element in JSON-Daten mit JSONPath abzufragen, verwenden Sie die folgende Syntax. Hier stellt $ das Stammverzeichnis der Datenhierarchie dar und elementName ist der Name des Elementknoten, der abgefragt werden soll.

$.elementName

Der folgende Ausdruck fragt das customerName-Element aus dem vorherigen JSON-Beispiel ab.

$.customerName

Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Datensatz zurück.

John Doe
Anmerkung

Pfadausdrücke beachten die Groß- und Kleinschreibung. Der Ausdruck $.customername gibt null aus dem vorherigen JSON-Beispiel zurück.

Anmerkung

Wenn an der Stelle, die der Pfadausdruck angibt, kein Element angezeigt wird, gibt der Ausdruck null zurück. Der folgende Ausdruck gibt null aus dem vorherigen Beispiel zurück, weil es kein übereinstimmendes JSON-Element gibt.

$.customerId

Zugriff auf verschachtelte JSON-Elemente

Um ein verschachteltes JSON-Element abzufragen, verwenden Sie die folgende Syntax.

$.parentElement.element

Der folgende Ausdruck fragt das city-Element aus dem vorherigen JSON-Beispiel ab.

$.address.city

Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Datensatz zurück.

Anytown

Sie können mithilfe der folgenden Syntax weitere Ebenen mit Unterelementen abfragen.

$.parentElement.element.subElement

Der folgende Ausdruck fragt das street-Element aus dem vorherigen JSON-Beispiel ab.

$.address.streetAddress.street

Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Datensatz zurück.

AnyStreet

Zugriff auf Arrays

Sie können auf die Daten in einem JSON-Array wie folgt zugreifen:

  • Abrufen aller Elemente im Array als einzelne Zeile.

  • Abrufen eines jeden Elements im Array als eigene Zeile.

Abrufen aller Elemente in einem Array in einer einzelnen Zeile

Um den gesamten Inhalt eines Arrays als einzelne Zeile abzufragen, verwenden Sie die folgende Syntax.

$.arrayObject[0:]

Der folgende Ausdruck fragt den gesamten Inhalt des orders-Elements im vorherigen JSON-Beispiel ab, das in diesem Abschnitt verwendet wird. Es gibt den Array-Inhalt in einer einzelnen Spalte in einer einzigen Zeile zurück.

$.orders[0:]

Der vorherige Ausdruck gibt Folgendes aus dem JSON-Beispiel-Datensatz zurück, der in diesem Abschnitt verwendet wird.

[{"orderId":"23284","itemName":"Widget","itemPrice":"33.99"},{"orderId":"61322","itemName":"Gadget","itemPrice":"22.50"},{"orderId":"77284","itemName":"Sprocket","itemPrice":"12.00"}]

Abrufen aller Elemente in einem Array in separaten Zeilen

Um die einzelnen Elemente in einem Array als eigene Zeilen abzufragen, verwenden Sie die folgende Syntax.

$.arrayObject[0:].element

Der folgende Ausdruck fragt die orderId-Elemente im vorhergehenden JSON-Beispiel ab und gibt jedes Arrayelement als eigene Zeile zurück.

$.orders[0:].orderId

Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Datensatz zurück, wobei jedes Datenelement als eigene Zeile zurückgegeben wird.

23284

63122

77284

Anmerkung

Wenn Ausdrücke, die andere Elemente als Array-Elemente abfragen, in einem Schema enthalten sind, das einzelne Array-Elemente abfragt, werden die Elemente, die keine Array-Elemente sind, für jedes Element im Array wiederholt. Angenommen, ein Schema für das vorherige JSON-Beispiel enthält die folgenden Ausdrücke:

  • $.customerName

  • $.orders[0:].orderId

In diesem Fall sehen die zurückgegebenen Daten aus dem Beispiel-Eingabe-Stream-Element wie folgt aus, wobei das name-Element für jedes orderId-Element wiederholt wird.

Hans Muster

23284

Hans Muster

63122

Hans Muster

77284

Anmerkung

Für Array-Ausdrücke in Amazon Kinesis Data Analytics gelten folgende Einschränkungen:

  • In einem Array-Ausdruck wird nur eine Dereferenzierungsebene unterstützt. Das folgende Ausdrucksformat wird nicht unterstützt.

    $.arrayObject[0:].element[0:].subElement
  • In einem Schema kann nur ein Array auf eine Ebene gebracht werden. Es können mehrere Arrays referenziert werden – sie werden als einzelne Zeile zurückgegeben, die alle Elemente im Array enthält. Es können jedoch nur für ein Array alle Elemente als einzelne Zeilen zurückgegeben werden.

    Ein Schema, das Elemente im folgenden Format enthält, ist gültig. Dieses Format gibt den Inhalt des zweiten Arrays als einzelne Spalte wider, was für jedes Element im ersten Array wiederholt wird.

    $.arrayObjectOne[0:].element $.arrayObjectTwo[0:]

    Ein Schema, das Elemente im folgenden Format enthält, ist nicht gültig.

    $.arrayObjectOne[0:].element $.arrayObjectTwo[0:].element

Weitere Überlegungen

Zusätzliche Überlegungen für das Arbeiten mit JSONPath sind folgende:

  • Wenn einzelne Elemente in den JSONPath-Ausdrücken im Anwendungsschema auf keine Arrays zugreifen, wird für jeden verarbeiteten JSON-Datensatz eine eigene Zeile im Eingabestream der Anwendung erstellt.

  • Wenn ein Array auf eine Ebene gebracht wird (d. h. seine Elemente werden als einzelne Zeilen zurückgegeben), führen fehlende Elemente dazu, dass im In-Application-Stream ein Nullwert erstellt wird.

  • Ein Array wird stets in Form mindestens einer Zeile auf eine Ebene gebracht. Wenn keine Werte zurückgegeben würden (d. h., wenn das Array leer ist oder keines seiner Elemente abgefragt wird), wird eine einzelne Zeile mit ausschließlich Nullwerten zurückgegeben.

    Der folgende Ausdruck gibt aus dem vorherigen JSON-Beispiel Datensätze mit Nullwerten zurück, da es im angegebenen Pfad kein übereinstimmendes Element gibt.

    $.orders[0:].itemId

    Der vorherige Ausdruck gibt Folgendes aus dem vorherigen JSON-Beispieldatensatz zurück.

    Null

    Null

    Null

Verwandte Themen