json est le format d’échange standard pour beaucoup d’APIs.
objectifs
- sérialiser avec
json.dumps()/json.dump() - désérialiser avec
json.loads()/json.load() - régler
indent,ensure_ascii,sort_keys - valider la présence de champs
explication détaillée
- texte → objet python :
json.loads(text)/json.load(f) - objet python → texte :
json.dumps(obj, indent=2, ensure_ascii=False)/json.dump(obj, f, ...) ensure_ascii=Falsepour conserver accent/utf‑8- attention :
setet objets non sérialisables → transformer au préalable
exemples exécutables
import json
obj = {"name": "ana", "skills": ["py", "sql"], "active": True}
text = json.dumps(obj, ensure_ascii=False, indent=2, sort_keys=True)
with open("user.json", "w", encoding="utf-8") as f:
f.write(text)
with open("user.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data["name"])
# validation minimale
required = {"name", "skills"}
missing = required - set(data)
print("manquants:", missing)
# sérialiser un objet non standard
from pathlib import Path
payload = {"files": [str(p) for p in Path(".").glob("*.md")]}
print(json.dumps(payload, ensure_ascii=False, indent=2))
bonnes pratiques
- conserver
ensure_ascii=Falseetindent=2pour lecture humaine - valider les champs requis avant d’utiliser les données
- sérialiser des chemins/objets en chaînes/structures natives
pièges courants
- essayer de dumper un objet non sérialisable → transformer d’abord
- oublier l’encodage en écriture/lecture
- supposer qu’un champ existe toujours
exercices
- joindre deux fichiers json simples en une seule liste puis sauvegarder.
- lire
config.json, fusionner avec des overrides en mémoire, écrireeffective-config.json. - convertir un CSV simple en JSON liste d’objets.