Bonjour,

je souhaite via une requête PostgreSQL, réccupérer le contenu d'un json.

On suppose que j'ai deux tables client et article.
Je vous met que la table article pour le test.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 create table article (
 	id_article serial primary key,
 	designation varchar not null,
 	prix int not null,
 	detail json not null,
 	id_client int not null,
 	foreign key (id_client)
 		references client (id_client)
 );

J'ai ajouté un élément dans la table article et ce qui nous intéresse est le champs detail

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
insert into article (
designation, 
prix, 
detail, 
id_client)
values (
'Table à manger', 
450, 
'{"adresseArtisan":"25 rue Noblet, 95100 Argenteuil","reference":562485662, "precisions":{"element":[{"key":"matiere","value":"BOIS"},{"key":"poids","value":"12kg"}]}}', 
1);
Detail:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
'{"adresseArtisan":"25 rue Noblet, 95100 Argenteuil","reference":562485662, "precisions":{"element":[{"key":"matiere","value":"BOIS"},{"key":"poids","value":"12kg"}]}}'
La requête suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
select detail->>'precisions' from article where id_article=1;
me renvoie:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
                                  precisions                                   
-------------------------------------------------------------------------------
 {"element":[{"key":"matiere","value":"BOIS"},{"key":"poids","value":"12kg"}]}
Ce qui m'intéresse, c'est de réccupérer les valeurs BOIS et 12kg via un select.

J'aimerais faire quelque chose dans ce genre:

select detail->>'precisions'->>'element'->>BOIS mais je ne sais pas comment m'y prendre.
Après je me doute que pour réccupérer le contenu de element, il faut utiliser un array_to_string. Mais, déjà il faut que j'accède à element.

Auriez vous une piste s'il vous plaît?

Je vous remercie par avance,