Le format JSON est largement adopté pour l’échange de données, et Python intègre un module dédié pour sa manipulation. Ce guide vous initiera à l’utilisation de JSON avec Python.
À l’issue de ce tutoriel, vous maîtriserez :
- Les fondements de JSON,
- La manipulation (analyse et création) de chaînes JSON avec Python,
- La lecture et l’écriture de données dans des fichiers JSON avec Python.
C’est parti ! 🚀
Qu’est-ce que JSON ?
JSON, acronyme de JavaScript Object Notation, est un format de texte permettant l’échange de données. Initialement inspiré par les objets JavaScript, il est désormais pris en charge par la plupart des langages de programmation.
Si vous avez déjà interagi avec des API ou analysé des fichiers de configuration, vous avez probablement déjà rencontré JSON.
📑 JSON est couramment utilisé pour l’envoi et la réception de données lors de requêtes API. De plus, il est essentiel dans la communication client-serveur des applications et peut servir au stockage de données à usage général.
La structure de JSON rappelle fortement celle des dictionnaires Python, ces structures de données clés-valeurs intégrées très puissantes.
Quelques précisions avant de poursuivre :
- Un objet JSON est interprété comme un dictionnaire en Python.
- Un tableau JSON est converti en une liste Python.
- Les booléens `true` et `false` en JSON deviennent `True` et `False` en Python.
Pour une description détaillée des types de données JSON et leur équivalent Python, consultez la documentation ici.
Le module `json` faisant partie de la bibliothèque standard de Python, il n’est pas nécessaire de l’installer. Vous pouvez l’importer comme suit :
import json
Comment charger une chaîne JSON en Python ?
La syntaxe générale pour charger une chaîne JSON en Python est la suivante :
<objet_dict> = json.loads(<chaine_json>)
Où :
- `<objet_dict>` est le dictionnaire Python qui recevra les données JSON,
- `<chaine_json>` est une chaîne de caractères JSON valide.
Cette instruction transfère le contenu de `<chaine_json>` dans le dictionnaire Python `<objet_dict>`.
Prenons un exemple : la variable `chaine_json` est une chaîne de caractères JSON.
chaine_json = """ { "books": [ { "title": "Le vent dans les saules", "author": "Kenneth Grahame", "year": "1908" }, { "title": "La promenade au phare", "author": "Virginia Woolf", "year": "1927" } ] } """
Le code ci-dessous montre comment charger cette chaîne JSON, `chaine_json`, dans un dictionnaire Python via la fonction `loads()`. La fonction `type()` confirme que `dict_python` est bien un dictionnaire.
dict_python = json.loads(chaine_json) type(dict_python) # Output: dict print(dict_python) # Output {'books': [{'title': 'Le vent dans les saules', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'La promenade au phare', 'author': 'Virginia Woolf', 'year': '1927'}]}
Comme on le constate, les paires clé-valeur de la chaîne JSON sont présentes dans `dict_python`.
Comment créer des chaînes JSON en Python ?
Si vous disposez d’un dictionnaire Python, comment le transformer en chaîne JSON ?
La fonction `dumps()` le permet, avec la syntaxe suivante :
<chaine_json> = json.dumps(<objet_dict>)
Ici :
- `<objet_dict>` est le dictionnaire Python à convertir,
- `<chaine_json>` est la chaîne JSON résultante.
La fonction `dumps()` traduit le dictionnaire `<objet_dict>` en chaîne JSON `<chaine_json>`.
Ajoutons une nouvelle clé « films » à notre dictionnaire `dict_python`, comme indiqué ci-dessous :
dict_python["films"] = [{"title":"Imitation Game","year":"2014", "lang":"fr","watched":True}]
Maintenant, convertissons ce dictionnaire modifié en une nouvelle chaîne JSON, `chaine_json2`, en utilisant `dumps()`.
chaine_json2 = json.dumps(dict_python) print(chaine_json2) # Output {"books": [{"title": "Le vent dans les saules", "author": "Kenneth Grahame", "year": "1908"}, {"title": "La promenade au phare", "author": "Virginia Woolf", "year": "1927"}], "films": [{"title": "Imitation Game", "year": "2014", "lang": "fr", "watched": true}]}
La chaîne JSON obtenue, sans mise en forme, est difficile à lire. Le paramètre optionnel `indent` permet d’ajouter une indentation.
Vous pouvez définir l’indentation sur une valeur entière, comme 2, par exemple :
chaine_json2 = json.dumps(dict_python, indent = 2) print(chaine_json2) # Output { "books": [ { "title": "Le vent dans les saules", "author": "Kenneth Grahame", "year": "1908" }, { "title": "La promenade au phare", "author": "Virginia Woolf", "year": "1927" } ], "films": [ { "title": "Imitation Game", "year": "2014", "lang": "fr", "watched": true } ] }
L’indentation améliore grandement la lisibilité de la sortie.
Note : 💡 Si vous souhaitez trier les clés par ordre alphabétique, configurez le paramètre `sort_keys` sur `True`.
Le code ci-dessous illustre le tri des clés par ordre alphabétique :
chaine_json2 = json.dumps(dict_python, indent = 2, sort_keys=True) print(chaine_json2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "Le vent dans les saules", "year": "1908" }, { "author": "Virginia Woolf", "title": "La promenade au phare", "year": "1927" } ], "films": [ { "lang": "fr", "title": "Imitation Game", "watched": true, "year": "2014" } ] }
Les clés apparaissent désormais dans l’ordre : « author », « title », « year ».
Vous avez maintenant acquis des compétences pour manipuler des chaînes JSON avec Python. Voyons comment travailler avec des fichiers JSON.
Comment lire un fichier JSON en Python ?
Pour lire un fichier JSON, utilisez la syntaxe suivante :
json.load(<fichier-json>) # où <fichier-json> est un fichier JSON valide.
Remarquez que nous utilisons la fonction `load()` (sans « s »), qui est différente de `loads()`. `loads()` traite une chaîne JSON, tandis que `load()` lit un fichier JSON.
Il est recommandé d’utiliser des gestionnaires de contexte lors de la manipulation de fichiers en Python. Vous pouvez tenter la lecture de fichiers sans gestionnaire de contexte :
fichier = open('etudiants.json','r') contenu = fichier.read() print(contenu) fichier.close()
Ne pas fermer un fichier après utilisation peut gaspiller des ressources.
En revanche, les gestionnaires de contexte garantissent la fermeture automatique des fichiers à la fin des opérations.
Utilisez un gestionnaire de contexte pour lire un fichier, comme suit :
with open('etudiants.json','r') as fichier: donnees = json.load(fichier) print(donnees) # Output {'etudiants': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
Indiquez le mode lecture `’r’` lors de l’ouverture du fichier.
Note : Pour un accès plus simple au fichier, placez-le dans le même dossier que votre script. Si le fichier est dans un autre dossier, spécifiez le chemin d’accès complet.
Lecture d’un fichier JSON avec Python.
La prochaine partie aborde l’écriture dans un fichier JSON. ✍
Comment écrire dans un fichier JSON en Python ?
Pour écrire dans un fichier JSON existant ou en créer un nouveau, utilisez la fonction `dump()` :
json.dump(<objet_dict>,<fichier_json>) # où <objet_dict> est un dictionnaire Python # et <fichier_json> est le fichier JSON
Cette syntaxe transfère le contenu du dictionnaire `<objet_dict>` vers le fichier JSON `<fichier_json>`.
Nous avions le dictionnaire `dict_python`. Transférons-le dans un nouveau fichier, que nous appellerons `nouveau_fichier.json`.
Le code suivant montre l’utilisation de `dump()` :
with open('nouveau_fichier.json','w') as fichier: json.dump(dict_python,fichier)
Note : L’ouverture d’un fichier en mode écriture (`w`) efface le contenu existant. Si le fichier n’existe pas, il est créé.
Après l’exécution du code, vous constaterez la création d’un nouveau fichier JSON dans le répertoire de travail. Vous pouvez en examiner le contenu.
Création d’un fichier JSON avec Python.
L’objectif principal de l’écriture dans un fichier est le stockage de données. Pour conserver la mise en forme, utilisez les paramètres `indent` et `sort_keys`.
Conclusion
⏲ Récapitulons ce que nous avons appris.
Ce tutoriel a couvert :
- Les principes de l’utilisation de JSON,
- L’utilisation de `loads()` et `load()` pour lire respectivement chaînes et fichiers JSON,
- L’utilisation de `dumps()` et `dump()` pour écrire des dictionnaires Python dans des chaînes et fichiers JSON.
J’espère que ce guide vous a été utile. Bon apprentissage !
N’hésitez pas à consulter des outils JSON pour analyser, formater ou valider vos données.