- Kategorien:
Funktionen für semistrukturierte und strukturierte Daten (Analyse)
TRY_PARSE_JSON¶
Eine spezielle Version von PARSE_JSON, die einen NULL-Wert zurückgibt, wenn beim Parsing ein Fehler auftritt.
Syntax¶
TRY_PARSE_JSON( <expr> )
Argumente¶
expr
Ein Ausdruck eines Zeichenfolgentyps (z. B. VARCHAR).
Rückgabewerte¶
Der zurückgegebene Wert ist vom Typ VARIANT
und enthält ein JSON-Dokument.
Nutzungshinweise¶
Diese Funktion unterstützt einen Eingabeausdruck mit einer maximalen komprimierten Größe von 8 MB.
Wenn der Eingabewert NULL ist, ist auch der Ausgabewert NULL. Wenn die Eingabezeichenfolge jedoch
'null'
ist, wird das als JSON-Nullwert interpretiert, sodass das Ergebnis nicht SQL NULL ist, sondern ein gültiger VARIANT-Wert, dernull
enthält.Beim Analysieren von Dezimalzahlen versucht die Funktion, die Genauigkeit der Darstellung zu erhalten, indem 123,45 als NUMBER(5,2) und nicht als DOUBLE behandelt wird. Zahlen in wissenschaftlicher Notation (z. B. 1,2345e+02) oder Zahlen, die aufgrund von Bereichs- oder Skalierungsbegrenzungen nicht als Festkomma-Dezimalzahlen gespeichert werden können, werden jedoch als DOUBLE gespeichert. Da JSON Werte wie TIMESTAMP, DATE, TIME oder BINARY nativ nicht darstellt, müssen diese als Zeichenfolgen dargestellt werden.
In JSON ist ein Objekt (auch als „Wörterbuch“ oder „Hash“ bezeichnet) eine ungeordnete Menge von Schlüssel-Wert-Paaren.
TO_JSON
undTRY_PARSE_JSON
sind (fast) konverse oder reziproke Funktionen.Die Funktion
TRY_PARSE_JSON
nutzt eine Zeichenfolge als Eingabe und gibt eine JSON-kompatible Variante zurück. Die FunktionTO_JSON
nutzt eine JSON-kompatible Variante und gibt eine Zeichenfolge zurück. Folgendes ist (konzeptionell) wahr (true), wenn X eine Zeichenfolge ist, die gültiges JSON enthält:X = TO_JSON(TRY_PARSE_JSON(X));
So ist zum Beispiel Folgendes (konzeptionell) wahr (true):
'{"pi":3.14,"e":2.71}' = TO_JSON(TRY_PARSE_JSON('{"pi":3.14,"e":2.71}'))
Die Funktionen sind jedoch aus zwei Gründen nicht perfekt reziprok:
Die Reihenfolge der Schlüssel-Wert-Paare in der von
TO_JSON
erzeugten Zeichenfolge ist nicht vorhersehbar.Die von
TO_JSON
erzeugte Zeichenfolge kann weniger Leerzeichen enthalten als die anTRY_PARSE_JSON
übergebene Zeichenfolge.
Folgende Angaben sind äquivalente in JSON, aber keine äquivalenten Zeichenfolgen:
{"pi": 3.14, "e": 2.71}
{"e":2.71,"pi":3.14}
Beispiele¶
Hier ein Beispiel für das Speichern verschiedener Datentypen in einer VARIANT-Spalte, indem Sie TRY_PARSE_JSON
aufrufen, um Zeichenfolgen zu analysieren, die Werte enthalten, die als JSON analysiert werden können:
Erstellen Sie eine Tabelle, und füllen Sie diese.
create or replace temporary table vartab (ID INTEGER, v VARCHAR); insert into vartab (id, v) VALUES (1, '[-1, 12, 289, 2188, false,]'), (2, '{ "x" : "abc", "y" : false, "z": 10} '), (3, '{ "bad" : "json", "missing" : true, "close_brace": 10 ');Fragen Sie die Daten mit
TRY_PARSE_JSON
ab. Beachten Sie, dass der Wert für die dritte Zeile NULL ist. Wenn die AbfragePARSE_JSON
anstelle vonTRY_PARSE_JSON
verwendet hätte, wäre die Abfrage fehlgeschlagen.SELECT ID, try_parse_json(v) FROM vartab ORDER BY ID; +----+-------------------+ | ID | TRY_PARSE_JSON(V) | |----+-------------------| | 1 | [ | | | -1, | | | 12, | | | 289, | | | 2188, | | | false, | | | undefined | | | ] | | 2 | { | | | "x": "abc", | | | "y": false, | | | "z": 10 | | | } | | 3 | NULL | +----+-------------------+