Lire un fichier JSON en Python : guide débutant avec un carnet de contacts
Apprenez à lire, modifier et enregistrer un fichier JSON en Python avec un exemple simple de carnet de contacts pour bien débuter facilement.
Pour lire un fichier JSON en Python, utilisez le module standard json et json.load(). Les données deviennent des dictionnaires et des listes Python, que vous pouvez modifier puis enregistrer avec json.dump().
Ce guide utilise un carnet de contacts dans contacts.json. Il suppose que vous savez déjà manipuler les dictionnaires et les fichiers ; consultez au besoin les dictionnaires Python et la lecture et l’écriture de fichiers.
Créer et lire un fichier JSON
JSON est un format texte pour enregistrer ou échanger des données structurées, notamment dans les fichiers de configuration et les API web. Il ressemble à un dictionnaire Python, mais les clés et les textes doivent être entre guillemets doubles ; les booléens s’écrivent true et false.
Créez contacts.json dans le même dossier que votre programme, avec ce contenu initial :
{
"contacts": [
{
"nom": "Camille Martin",
"telephone": "06 12 34 56 78",
"email": "[email protected]"
},
{
"nom": "Samir Bernard",
"telephone": "07 98 76 54 32",
"email": "[email protected]"
}
]
}
La clé contacts contient une liste de dictionnaires. Le module json, inclus avec Python, lit ce fichier sans installation supplémentaire.
import json
with open("contacts.json", "r", encoding="utf-8") as fichier:
donnees = json.load(fichier)
for contact in donnees["contacts"]:
print(contact["nom"])
print(contact["telephone"])
print(contact["email"])
print()
donnees est alors un dictionnaire Python et donnees["contacts"] est une liste. Le bloc with ferme automatiquement le fichier ; encoding="utf-8" permet notamment de lire les accents correctement.
Ajouter et enregistrer un contact
Ajoutez un dictionnaire à la liste avec append(), puis réécrivez toute la structure avec json.dump(). JSON ne peut pas enregistrer directement tous les objets Python, tels qu’une fonction, un ensemble (set) ou un objet créé avec une classe.
nouveau_contact = {
"nom": "Lina Dupont",
"telephone": "06 45 67 89 01",
"email": "[email protected]"
}
donnees["contacts"].append(nouveau_contact)
with open("contacts.json", "w", encoding="utf-8") as fichier:
json.dump(donnees, fichier, ensure_ascii=False, indent=2)
indent=2 rend le fichier plus lisible et ensure_ascii=False conserve les caractères accentués. Le mode "w" remplace le contenu existant : gardez une copie des données importantes avant d’exécuter un programme qui écrit dans le fichier.
Chaque exécution de cet exemple ajoute encore Lina Dupont. Dans une application, vous pourriez vérifier l’existence d’un e-mail identique ou demander les informations avec input().
Gérer les erreurs courantes
- FileNotFoundError : Python ne trouve pas contacts.json. Vérifiez le nom, l’extension et le dossier depuis lequel le programme est lancé.
- json.JSONDecodeError : le fichier existe, mais son contenu n’est pas un JSON valide. Un guillemet manquant, une virgule finale ou des guillemets simples autour des clés peut provoquer cette erreur.
- UnicodeDecodeError : l’encodage ne correspond pas à celui attendu. Enregistrez le fichier en UTF-8 et conservez encoding="utf-8" à l’ouverture.
Si le fichier n’existe pas encore, créez une structure vide avant d’ajouter des contacts :
import json
from pathlib import Path
chemin = Path("contacts.json")
if chemin.exists():
with chemin.open("r", encoding="utf-8") as fichier:
donnees = json.load(fichier)
else:
donnees = {"contacts": []}
pathlib simplifie la gestion des chemins ; voyez le guide sur pathlib en Python. JSON convient aux petites données structurées ; pour des recherches complexes ou plusieurs utilisateurs, une base de données sera généralement plus adaptée.
La documentation officielle du module json détaille les autres options de conversion.