- Catégories :
Fonctions de données semi-structurées (Parsing)
PARSE_JSON¶
Interprète une chaîne d’entrée comme un document JSON, produisant une valeur VARIANT.
- Voir aussi :
Syntaxe¶
PARSE_JSON( <expr> )
Arguments¶
expr
Une expression de type chaîne (par exemple VARCHAR) qui contient des informations valides JSON.
Renvoie¶
La valeur renvoyée est de type VARIANT
et contient un document JSON.
Notes sur l’utilisation¶
Cette fonction prend en charge une expression d’entrée avec une taille maximale de 8 MB compressée.
Si l’entrée est NULL, la sortie est NULL aussi. Toutefois, si la chaîne entrée est
'null'
, elle est interprétée comme une valeur JSON nulle de sorte que le résultat ne soit pas SQL NULL, mais une valeur VARIANT valide contenantnull
.Lors de l’analyse des nombres décimaux, PARSE_JSON tente de préserver l’exactitude de la représentation en considérant 123,45 comme NUMBER(5,2) et non comme DOUBLE. Toutefois, les nombres utilisant une notation scientifique (c’est-à-dire 1,2345e+02) ou des nombres qui ne peuvent pas être stockés sous forme de nombres décimaux à virgule fixe en raison de limitations de plage ou d’échelle sont stockés sous la forme DOUBLE. Comme JSON ne représente pas des valeurs telles que TIMESTAMP, DATE, TIME ou BINARY de manière native, celles-ci doivent être représentées sous forme de chaînes.
Dans JSON, un objet (également appelé « dictionnaire » ou « hachage ») est un ensemble non ordonné de paires clé-valeur.
TO_JSON
etPARSE_JSON
sont (presque) des fonctions converses ou réciproques.La fonction
PARSE_JSON
prend une chaîne en entrée et renvoie une variante compatible avec JSON. La fonctionTO_JSON
utilise une variante compatible avec JSON et renvoie une chaîne. Conceptuellement, ce qui suit est vrai si X est une chaîne contenant du code JSON valide :X = TO_JSON(PARSE_JSON(X));
Par exemple, ce qui suit est vrai (conceptuellement) :
'{"pi":3.14,"e":2.71}' = TO_JSON(PARSE_JSON('{"pi":3.14,"e":2.71}'))
Cependant, les fonctions ne sont pas parfaitement réciproques pour deux raisons :
L’ordre des paires clé-valeur dans la chaîne produite par
TO_JSON
n’est pas prévisible.La chaîne produite par
TO_JSON
peut avoir moins d’espaces que la chaîne transmise àPARSE_JSON
.
Les éléments suivants sont des équivalents JSON, mais pas des chaînes équivalentes :
{"pi": 3.14, "e": 2.71}
{"e":2.71,"pi":3.14}
Exemples¶
Cela montre un exemple de stockage de différents types de données dans une colonne VARIANT en appelant PARSE_JSON
pour analyser des chaînes contenant des valeurs pouvant être analysées comme JSON :
Créez et remplissez une table. Notez que l’instruction
INSERT
utilise la fonctionPARSE_JSON
.create or replace table vartab (n number(2), v variant); insert into vartab select column1 as n, parse_json(column2) as v from values (1, 'null'), (2, null), (3, 'true'), (4, '-17'), (5, '123.12'), (6, '1.912e2'), (7, '"Om ara pa ca na dhih" '), (8, '[-1, 12, 289, 2188, false,]'), (9, '{ "x" : "abc", "y" : false, "z": 10} ') AS vals;Interroger les données :
select n, v, typeof(v) from vartab; +---+------------------------+------------+ | N | V | TYPEOF(V) | |---+------------------------+------------| | 1 | null | NULL_VALUE | | 2 | NULL | NULL | | 3 | true | BOOLEAN | | 4 | -17 | INTEGER | | 5 | 123.12 | DECIMAL | | 6 | 1.912000000000000e+02 | DOUBLE | | 7 | "Om ara pa ca na dhih" | VARCHAR | | 8 | [ | ARRAY | | | -1, | | | | 12, | | | | 289, | | | | 2188, | | | | false, | | | | undefined | | | | ] | | | 9 | { | OBJECT | | | "x": "abc", | | | | "y": false, | | | | "z": 10 | | | | } | | +---+------------------------+------------+