web-dev-qa-db-fra.com

Comment puis-je obtenir toutes les clés d'une colonne JSON dans Postgres?

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?

34

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.

50
Sevanteri
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;
3
Dmitry Savinkov

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.

0
natsuapo