Est-il possible de renvoyer une clé d'objet JSON sous forme de tableau de valeurs dans PostgreSQL?
En JavaScript, ce serait simplement Object.keys(obj)
, qui retourne un tableau de chaînes.
Par exemple, si j'ai une table comme celle-ci:
tbl_items
---------
id bigserial NOT NULL
obj json NOT NULL
Et s'il y a une rangée comme celle-ci:
id obj
----- -------------------------
123 '{"foo":1,"bar":2}'
Comment puis-je avoir une requête à retourner:
id keys
----- ------------------
123 '{"foo","bar"}'
Bien sûr, avec json_object_keys()
. Cela renvoie un ensemble - contrairement à la fonction JavaScript Object.keys(obj)
à laquelle vous faites référence, qui renvoie un tableau . Alimentez l'ensemble à un constructeur ARRAY
pour le transformer:
SELECT id, ARRAY(SELECT json_object_keys(obj)) AS keys
FROM tbl_items;
Ou utilisez jsonb_object_keys()
pour jsonb
.
Cela renvoie un tableau de clés par ligne (pas pour la table entière).
Une forme plus détaillée consisterait à épeler une jointure LATERAL
au lieu de la sous-requête corrélée:
SELECT t.id, k.keys
FROM tbl_items t
LEFT JOIN LATERAL (SELECT ARRAY(SELECT * FROM json_object_keys(t.obj)) AS keys) k ON true;