Eh bien tout d'abord, comme tout module, il faut l'inclure. Pour ce faire, rien de plus simple :
Code : Python
Sachez que ce module est déjà capable de sérialiser tous les types standards de Python hormis les
tuples et les entrées binaires (en même temps, pour un format texte…).
Premier exemple : sérialiser dans une chaîne de caractères
Tout d'abord, on inclut le module JSON :
Code : Python Console
Ensuite, on peuple la
playlist :
Code : Python Console | >>> playlist = {}
>>> playlist["nom"] = "MeshowRandom"
>>> playlist["musiques"] = []
>>> playlist["musiques"].append("Best Improvisation Ever 2")
>>> playlist["musiques"].append("My Theory (Bonus)")
>>>
>>> print(playlist)
{'musiques': ['Best Improvisation Ever 2', 'My Theory (Bonus)'], 'nom': 'MeshowRandom'}
|
Voici à présent la partie intéressante : on va demander au module de transposer notre dictionnaire au format JSON.
Pour cela, on va se servir de la fonction
json.dumps(objet) (le
s signifie ici
string).
Code : Python Console | >>> print(json.dumps(playlist))
{"musiques": ["Best Improvisation Ever 2", "My Theory (Bonus)"], "nom": "MeshowRandom"}
|
Vous pouvez constater que la fonction nous retourne une chaîne de caractères décrivant bien notre
playlist au format JSON !
Mais le code est sur une seule ligne et n'est pas indenté…
C'est illisible !
En effet, ce n'est pas très lisible pour nous, mortels.
On peut heureusement procéder comme ceci pour indenter automatiquement la sortie de la fonction :
Code : Python Console | >>> print(json.dumps(playlist, indent=4))
{
"musiques": [
"Best Improvisation Ever 2",
"My Theory (Bonus)"
],
"nom": "MeshowRandom"
}
|
C'est déjà plus clair.
Deuxième exemple : sérialiser dans un fichier
Eh bien, il suffit de sauvegarder la chaîne retournée par json.dumps(objet) dans un fichier, non ?
Pourquoi ce deuxième exemple ?
On pourrait le faire, mais il est plus pratique d'utiliser une fonction du module dédiée à l'écriture dans les fichiers : la fonction
json.dump(objet, flux).
Celle-ci va directement écrire dans le flux de données (ici notre fichier), sans passer par une chaîne de caractères intermédiaire.
On va conserver la
playlist remplie précédemment et utiliser cette fonction :
Code : Python Console | >>> with open('Test.json', 'w', encoding='utf-8') as f:
... json.dump(playlist, f, indent=4)
|
Voici ce que j'obtiens :
Code : JavaScript - Test.json | {
"musiques": [
"Best Improvisation Ever 2",
"My Theory (Bonus)"
],
"nom": "MeshowRandom"
}
|
C'est beau, n'est-ce pas ?
On remarquera que les clés ont été rangées un peu n'importe comment ; cela est dû au fait que Python range les paires de façon arbitraire.
Si vous voulez que les attributs soient sérialisés dans le même ordre que celui que vous avez indiqué, alors utilisez un OrderedDict fourni dans le module collections.
Voici un exemple :
Code : Python Console 1
2
3
4
5
6
7
8
9
10
11
12
13 | >>> from collections import OrderedDict
>>> dct = OrderedDict()
>>> dct["__class__"] = "Playlist"
>>> dct["name"] = "MeshowRandom"
>>> dct["description"] = "Cool stuff."
>>>
>>> import json
>>> print(json.dumps(dct, indent="4"))
{
"__class__": "Playlist",
"name": "MeshowRandom",
"description": "Cool stuff."
}
|
Et après ?
Désormais, vous savez sérialiser les principaux objets de Python au format JSON, et ce, dans des fichiers.
Cependant, avant de vous quitter, j'aimerais aborder la sérialisation d'instances de classes inconnues du module
json telles que la classe
Playlist ou la classe
Musique.
Pour cela, rendez-vous dans la partie suivante.
