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.
Extrahieren Sie JSON Daten aus Zeichenketten
Möglicherweise haben Sie Quelldaten, die JSON -kodierte Zeichenketten enthalten, die Sie nicht unbedingt in eine Tabelle in Athena deserialisieren möchten. In diesem Fall können Sie weiterhin SQL Operationen mit diesen Daten ausführen, indem Sie die in Presto verfügbaren Funktionen verwenden. JSON
Betrachten Sie diese JSON Zeichenfolge als Beispieldatensatz.
{"name": "Susan Smith",
"org": "engineering",
"projects":
[
{"name":"project1", "completed":false},
{"name":"project2", "completed":true}
]
}
Beispiele: Eigenschaften extrahieren
Verwenden Sie die json_extract
Funktion wie im folgenden Beispiel, um die projects
Eigenschaften name
und aus der JSON Zeichenfolge zu extrahieren. Die json_extract
Funktion verwendet die Spalte, die die JSON Zeichenfolge enthält, und durchsucht sie mit einem JSONPath
ähnlichen Ausdruck in .
Punktnotation.
Anmerkung
JSONPath
führt einen einfachen Strukturdurchlauf aus. Sie verwendet das $
Zeichen, um den Stamm des JSON Dokuments zu kennzeichnen, gefolgt von einem Punkt und einem direkt unter dem Stamm geschachtelten Element, z. B. $.name
WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false}, {"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract(myblob, '$.name') AS name, json_extract(myblob, '$.projects') AS projects FROM dataset
Der zurückgegebene Wert ist eine JSON -kodierte Zeichenfolge und kein systemeigener Athena-Datentyp.
+-----------------------------------------------------------------------------------------------+
| name | projects |
+-----------------------------------------------------------------------------------------------+
| "Susan Smith" | [{"name":"project1","completed":false},{"name":"project2","completed":true}] |
+-----------------------------------------------------------------------------------------------+
Verwenden Sie die Funktion, um den Skalarwert aus der JSON Zeichenfolge zu extrahieren. json_extract_scalar
Sie ist json_extract
ähnlich, gibt jedoch nur skalare Werte (boolesche Werte, Zahlen oder Zeichenfolgen) zurück.
Anmerkung
Verwenden Sie die Funktion json_extract_scalar
nicht für Arrays, Zuordnungen oder Strukturen.
WITH dataset AS ( SELECT '{"name": "Susan Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.name') AS name, json_extract_scalar(myblob, '$.projects') AS projects FROM dataset
Diese Abfrage gibt Folgendes zurück:
+---------------------------+
| name | projects |
+---------------------------+
| Susan Smith | |
+---------------------------+
Um das erste Element der Eigenschaft projects
in dem Beispiel-Array abzurufen, verwenden Sie die Funktion json_array_get
und geben Sie die Indexposition an.
WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_array_get(json_extract(myblob, '$.projects'), 0) AS item FROM dataset
Sie gibt den Wert an der angegebenen Indexposition im JSON -codierten Array zurück.
+---------------------------------------+
| item |
+---------------------------------------+
| {"name":"project1","completed":false} |
+---------------------------------------+
Um einen Athena-Zeichenfolgetyp zurückzugeben, verwenden Sie den []
-Operator in einem JSONPath
-Ausdruck und verwenden Sie anschließend die Funktion json_extract_scalar
. Mehr über []
erfahren Sie unter Zugriff auf Array-Elemente.
WITH dataset AS ( SELECT '{"name": "Bob Smith", "org": "engineering", "projects": [{"name":"project1", "completed":false},{"name":"project2", "completed":true}]}' AS myblob ) SELECT json_extract_scalar(myblob, '$.projects[0].name') AS project_name FROM dataset
Sie erhalten das folgende Ergebnis:
+--------------+
| project_name |
+--------------+
| project1 |
+--------------+