Si j'ai une table avec une colonne nommée json_stuff
, et j'ai deux lignes avec
{ "things": "stuff" }
et { "more_things": "more_stuff" }
dans leurs json_stuff
colonne, quelle requête puis-je faire sur la table pour recevoir [ things, more_things ]
Par conséquent?
Utilisez ceci:
select jsonb_object_keys(json_stuff) from table;
(Ou juste json_object_keys
si vous utilisez uniquement json.)
La documentation json de PostgreSQL est assez bonne. Jetez un oeil .
Et comme indiqué dans la documentation, la fonction n'obtient que la plupart des clés externes. Donc, si les données sont une structure json imbriquée, la fonction ne renverra aucune des clés les plus profondes.
WITH t(json_stuff) AS ( VALUES
('{"things": "stuff"}'::JSON),
('{"more_things": "more_stuff"}'::JSON)
)
SELECT array_agg(stuff.key) result
FROM t, json_each(t.json_stuff) stuff;
Voici l'exemple si vous souhaitez obtenir la liste des clés de chaque objet:
select array_agg(json_keys),id from (
select json_object_keys(json_stuff) as json_keys,id from table) a group by a.id
Ici id
est l'identifiant ou la valeur unique de chaque ligne. Si la ligne ne peut pas être distinguée par l'identifiant, il vaut peut-être mieux essayer PL/pgSQL
.