OUJOOD.COM
JSON (JavaScript Object Notation) est le format texte le plus utilisé pour échanger des données sur le web. Les APIs retournent du JSON, les fichiers de configuration l'utilisent, les bases de données NoSQL le stockent. Sa syntaxe ressemble aux dictionnaires Python — ce n'est pas un hasard, les deux structures partagent la même logique clé/valeur.
Python intègre un module json dans sa bibliothèque standard. Pas d'installation nécessaire. Ce cours vous montre comment lire un fichier JSON, comment en écrire un, et comment convertir des données Python en JSON et inversement.
Correspondance JSON ↔ Python
Avant de coder, voici comment les types JSON correspondent aux types Python :
| JSON | Python | Exemple JSON |
|---|---|---|
| object | dict | {"nom": "Alice"} |
| array | list | [1, 2, 3] |
| string | str | "bonjour" |
| number | int / float | 42 / 3.14 |
| true / false | True / False | true |
| null | None | null |
Lire un fichier JSON : json.load()
json.load() lit un fichier JSON et le convertit directement en objet Python (dictionnaire, liste, etc.). C'est la fonction à utiliser quand les données sont dans un fichier sur le disque.
# Contenu du fichier utilisateur.json : # { # "nom": "Alice", # "age": 30, # "langages": ["Python", "JavaScript"], # "actif": true # } import json with open("utilisateur.json", "r", encoding="utf-8") as f: utilisateur = json.load(f) print(utilisateur["nom"]) # Résultat : Alice print(utilisateur["langages"]) # Résultat : ['Python', 'JavaScript'] print(type(utilisateur)) # Résultat : <class 'dict'>
Écrire un fichier JSON : json.dump()
json.dump() convertit un objet Python en JSON et l'écrit dans un fichier. Le paramètre indent formate le JSON avec une indentation lisible — sans lui, tout s'écrit sur une seule ligne.
import json
utilisateur = {
"nom": "Bob",
"age": 25,
"langages": ["Python", "PHP"],
"actif": True
}
with open("utilisateur.json", "w", encoding="utf-8") as f:
json.dump(utilisateur, f, indent=4, ensure_ascii=False)
print("Fichier JSON écrit.")
Le paramètre ensure_ascii=False est important : sans lui, les caractères accentués comme é ou ç sont convertis en séquences d'échappement Unicode (\u00e9). Avec ensure_ascii=False, ils restent lisibles directement dans le fichier.
Convertir une chaîne JSON : json.loads() et json.dumps()
json.loads() (avec un s pour string) convertit une chaîne de caractères JSON en objet Python. json.dumps() fait l'inverse. Ces deux fonctions s'utilisent quand les données viennent d'une API, d'une base de données ou de toute autre source qui retourne du texte brut plutôt qu'un fichier.
import json # json.loads() → chaîne JSON vers objet Python chaine_json = '{"ville": "Paris", "population": 2161000}' donnees = json.loads(chaine_json) print(donnees["ville"]) # Résultat : Paris # json.dumps() → objet Python vers chaîne JSON produit = {"nom": "Clavier", "prix": 49.99, "stock": True} chaine = json.dumps(produit, indent=2, ensure_ascii=False) print(chaine) # Résultat : # { # "nom": "Clavier", # "prix": 49.99, # "stock": true # }
Lire un JSON contenant une liste
Un fichier JSON peut contenir directement un tableau (liste en Python). C'est courant pour des exports de données : une liste d'utilisateurs, de produits, de transactions.
import json from pathlib import Path # Créer un fichier JSON avec une liste eleves = [ {"nom": "Alice", "note": 17}, {"nom": "Bob", "note": 12}, {"nom": "Claire", "note": 15} ] Path("eleves.json").write_text( json.dumps(eleves, indent=2, ensure_ascii=False), encoding="utf-8" ) # Lire et parcourir la liste with open("eleves.json", "r", encoding="utf-8") as f: liste = json.load(f) for eleve in liste: print(f"{eleve['nom']} : {eleve['note']}/20") # Résultat : # Alice : 17/20 # Bob : 12/20 # Claire : 15/20
Mettre à jour un fichier JSON
Pour modifier un fichier JSON : lisez-le, modifiez l'objet Python en mémoire, puis réécrivez-le. Python ne peut pas modifier un JSON directement sur le disque sans le charger.
import json # Étape 1 : lire le fichier existant with open("utilisateur.json", "r", encoding="utf-8") as f: utilisateur = json.load(f) # Étape 2 : modifier en mémoire utilisateur["age"] += 1 utilisateur["langages"].append("TypeScript") # Étape 3 : réécrire le fichier with open("utilisateur.json", "w", encoding="utf-8") as f: json.dump(utilisateur, f, indent=4, ensure_ascii=False) print("Fichier mis à jour.")
Gérer les erreurs JSON
Si le JSON est mal formé — une virgule en trop, des guillemets simples au lieu de doubles — json.loads() et json.load() lèvent une json.JSONDecodeError. Intercéptez-la pour éviter que votre programme plante.
import json
chaine_invalide = "{'clé': 'valeur'}"
# JSON invalide : guillemets simples non autorisés en JSON
try:
donnees = json.loads(chaine_invalide)
except json.JSONDecodeError as e:
print(f"JSON invalide : {e}")
# Résultat : JSON invalide : Expecting property name enclosed in double quotes...
Récapitulatif des quatre fonctions essentielles
| Fonction | Source | Résultat | Usage typique |
|---|---|---|---|
| json.load(f) | Fichier ouvert | Objet Python | Lire un fichier .json |
| json.dump(obj, f) | Objet Python | Fichier JSON | Écrire un fichier .json |
| json.loads(s) | Chaîne JSON | Objet Python | Réponse d'une API |
| json.dumps(obj) | Objet Python | Chaîne JSON | Préparer une requête API |
Par carabde | Mis à jour le 21 avril 2026