Arborescences en R-JSON (->)
Exemple :
@startuml
hide circle
class Cours {
code : text {key}
titre : text {key}
nbpages : integer
}
class Auteur {
nom : text
prénom : text
}
class Adresse {
numéro : integer
rue : text
cp : integer
ville : text
}
Cours *- "1" Auteur : ""
Auteur *- "1" Adresse : ""
@enduml
Exemple :
1
CREATE TABLE cours (
2
code TEXT PRIMARY KEY,
3
titre TEXT UNIQUE NOT NULL,
4
nbpages INTEGER NOT NULL,
5
auteur JSON NOT NULL
6
);
1
INSERT INTO cours (code, titre, nbpages, auteur)
2
VALUES (
3
'NF17',
4
'Bases de données',
5
98,
6
'{"nom":"Crozat","prenom":"Stéphane","adresse":{"num":18,"rue":"rue St Fiacre","cp":60200,"ville":"Compiègne"}}'
7
);
8
INSERT INTO cours (code, titre, nbpages, auteur)
9
VALUES (
10
'NF29',
11
'Ingénierie documentaire',
12
45,
13
'{"nom":"Crozat","prenom":"Stéphane","adresse":{"num":18,"rue":"rue St Fiacre","cp":60200,"ville":"Compiègne"}}'
14
);
1
INSERT INTO cours (code, titre, nbpages, auteur)
2
VALUES (
3
'NF29',
4
'Ingénierie documentaire',
5
45,
6
'{"nom":"Crozat","prenom":"Stéphane","adresse":{"num":4,"rue":"rue St Germain","cp":60300,"ville":"Senlis"}}'
7
);
Syntaxe : Parcourir un JSON (opérateur ->)
1
SELECT jsonatt->'key1'->>'key2' FROM t;
Renvoie la valeur associée à key2
qui se trouve dans key1
.
Exemple :
1
SELECT
2
titre,
3
auteur->>'nom' AS nom_auteur,
4
auteur->>'prenom' AS prenom_auteur,
5
auteur->'adresse'->>'ville' AS ville_auteur
6
FROM cours;
1
titre | nom_auteur | prenom_auteur | ville_auteur
2
-------------------------+------------+---------------+--------------
3
Bases de données | Crozat | Stéphane | Compiègne
4
Ingénierie documentaire | Crozat | Stéphane | Senlis
Attention :
-> Est un opérateur de parcours intermédiaire, qui renvoie du JSON
->> Est un opérateur final qui renvoie une valeur.