Parfois, la structure des données ne rentre pas dans les cases classiques des chaînes et des nombres. Par exemple, un utilisateur peut avoir une liste de hobbies, des paramètres de profil personnalisés ou des options de commande imbriquées. Créer des tables séparées juste pour ça, c’est pas super pratique. C’est là que JSON entre en jeu.
PostgreSQL gère deux formats pour ce genre de données : JSON et JSONB. Les deux permettent de stocker des données structurées dans une seule colonne, mais il y a des différences importantes entre eux.
On va voir comment ça marche, quand utiliser chaque format et ce que ça permet de faire.
C’est quoi JSON
JSON (JavaScript Object Notation) — c’est un format texte pour échanger des données, créé pour représenter facilement des données structurées. C’est un format que tout dev web connaît bien, et on peut le décrire comme “facile à lire pour un humain” et “facile à parser pour une machine”. Dans PostgreSQL, ce format sert à stocker et manipuler des données structurées.
Voici un exemple d’objet JSON :
{
"name": "Alex Lin",
"age": 25,
"skills": ["SQL", "PostgreSQL", "JavaScript"],
"address": {
"city": "Berlin",
"postal_code": "10115"
}
}
Remarque : JSON, c’est juste du texte, mais avec des règles. Par exemple, les noms des clés sont toujours entre guillemets.
JSONB : Binary JSON
JSONB, c’est le “JSON binaire”, aussi supporté par PostgreSQL. Contrairement à JSON, JSONB peut être indexé et est optimisé pour la recherche rapide et les modifications. La différence principale entre JSON et JSONB dans PostgreSQL, c’est la façon dont ils sont stockés :
- JSON est stocké comme une chaîne de texte, exactement comme tu l’as envoyé.
- JSONB convertit les données en format binaire, ce qui est plus efficace pour la plupart des opérations.
JSONB te donne des features comme : filtrage, indexation, comparaison de structures imbriquées complexes.
Les avantages principaux de JSONB
Pourquoi choisir JSONB plutôt que JSON ? Voilà quelques raisons :
- Recherche et filtrage plus rapides
JSONB est fait pour extraire les données rapidement. Par exemple, si tu as un gros tableau d’objets, JSONB permet de trouver l’élément voulu sans tout parcourir.
- Possibilité d’indexation
Avec l’indexation, tu peux chercher par clés et valeurs à l’intérieur du JSONB, ce qui rend les requêtes super rapides. Considérer JSON comme du texte (au format JSON) ne permet pas l’indexation.
- Facilité avec les données imbriquées
JSONB gère super bien les structures imbriquées. Pas besoin de multiplier les tables pour gérer des données hiérarchiques — tout peut être rangé proprement.
Quand utiliser JSON, et quand JSONB
- JSON est utile si tu veux garder les données “telles quelles” en texte. Par exemple, si tu veux garder une trace exacte des données ou si tu veux juste un minimum de traitement.
- JSONB est top si tu comptes faire plein de requêtes, de filtres, de modifs, ou si tu as besoin d’indexation.
Exemples d’objets JSON
Regardons quelques exemples d’objets JSON pour voir ce qu’on peut faire avec leur structure.
Un objet JSON simple.
Structure clé-valeur :
{
"name": "Ekaterina",
"age": 29
}
Les tableaux dans JSON
JSON gère les tableaux :
{
"skills": ["Python", "SQL", "Analyse de données"]
}
Objets imbriqués
JSON permet de créer des structures pour stocker des données complexes :
{
"name": "Andrey",
"contacts": {
"email": "andrey@example.com",
"phone": "+79012345678"
}
}
Combiner tableaux et objets
Tu peux combiner des tableaux et des objets :
{
"team": [
{
"name": "Elena",
"role": "manager"
},
{
"name": "Pavel",
"role": "développeur"
}
]
}
JSON et PostgreSQL
PostgreSQL propose deux types de données séparés pour bosser avec JSON :
JSON: format texte.JSONB: format binaire.
Créer une table avec des colonnes JSON et JSONB
Voyons comment utiliser JSON/JSONB dans des tables PostgreSQL. Par exemple, on va créer une table pour stocker des infos sur les employés d’une boîte :
-- On crée une table avec des colonnes JSON et JSONB
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
details JSON, -- JSON texte
profile JSONB -- JSON binaire
);
À première vue, on dirait qu’il n’y a pas de différence entre ces colonnes. Mais en vrai : JSON est parfait pour stocker les données sans les modifier, alors que JSONB est mieux pour filtrer et chercher.
-- On insère des données
INSERT INTO employees (name, details, profile)
VALUES
('Alex Lin', '{"age": 30, "city": "Tallinn"}', '{"skills": ["SQL", "PostgreSQL"], "hobby": "football"}'),
('Maya Novak', '{"age": 25, "city": "Riga"}', '{"skills": ["Python", "Machine Learning"], "hobby": "lecture"}');
Extraire des données JSONB
Tu peux extraire des données depuis JSONB avec des fonctions spéciales, qu’on verra dans la prochaine leçon. Par exemple, pour voir les skills des employés :
-- Extraire les compétences
SELECT name, profile->'skills' AS skills
FROM employees;
Résultat :
| name | skills |
|---|---|
| Alex Lin | ["SQL", "PostgreSQL"] |
| Maya Novak | ["Python", "Machine Learning"] |
Utilisation de JSON dans la vraie vie
JSON (et JSONB) est super utilisé dans les applis réelles. Voici quelques exemples :
- API et microservices. JSON est le format standard pour échanger des données dans les RESTful API. PostgreSQL le gère nativement pour le stockage et le traitement.
- Intégration de données. Si ta base reçoit des données de différents systèmes, bosser avec JSONB est plus pratique.
- Gérer des structures complexes. Par exemple, JSONB est parfait pour stocker des données de formulaires, des paramètres utilisateurs ou des métadonnées d’entreprise.
GO TO FULL VERSION