Décomposition avec JSON_TABLE

RPG (3 et 4, free), CL, SQL, etc...
Répondre
nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Décomposition avec JSON_TABLE

Message par nbonnet »

Bonjour,

Je cherche à obtenir, par JSON_TABLE (ou autre ??), la liste des couples clé/valeur présent dans un document JSON, sans connaitre à l'avance les valeurs des clés (cas de documents reçus avec un contenu variable).

Cas classique si l'on connait les noms des attributs à l'avance :

Code : Tout sélectionner

SELECT *
FROM JSON_TABLE(
            '{"id":1, "nom":"Curie", "prenom":"Marie"}',
            '$' COLUMNS(
                  id INT PATH 'lax $.id', 
                  last VARCHAR(35) PATH 'lax $.nom', 
                  first VARCHAR(35) PATH 'lax $.prenom' ) ) AS t;


On peut également retrouver toutes les valeurs, mais sans connaitre la clé !

Code : Tout sélectionner

SELECT *
FROM JSON_TABLE(
            '{"id":1, "nom":"Curie", "prenom":"Marie"}',
            '$.*' COLUMNS(
                  valeur varchar(30) PATH 'lax $' ) ) AS t;


Avez-vous une syntaxe permettant de lister toutes les clé/valeur ?

Merci
Nathanaël

vazymimil
Messages : 32
Enregistré le : ven. 28 sept. 2018, 17:14:46

Re: Décomposition avec JSON_TABLE

Message par vazymimil »

Bonjour,

c'est un peu brut mais avec les regexp...

Code : Tout sélectionner

with
	json_input(value) as (values '{"id":1, "nom":"Curie", "prenom":"Marie"}'),
	indexes(id) as (values 1 union all select id + 1 from indexes where id < 5),
	keys(value) as (select regexp_extract(json_input.value, '"([^"]*)":', 1, indexes.id, '', 1) from json_input cross join indexes)
select
	keys.value,
	json_value(json_input.value, '$.' concat keys.value)
from
	json_input
	cross join keys
where
	keys.value is not null
	and json_exists(json_input.value, '$.' concat keys.value)
Nicolas

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Décomposition avec JSON_TABLE

Message par nbonnet »

Merci Nicolas,

Oui, j'ai pensé aux regex aussi, mais je n'avais pas fait la requête !

John Eberhard me confirme que ce n'est pas possible avec JSON_TABLE
Nathanaël

Répondre