Travailler avec des fichiers JSON en Python, avec des exemples –

Dans ce didacticiel, nous apprendrons à lire, écrire et analyser JSON en Python avec des exemples pertinents. Nous explorerons également les modules populaires de Python pour travailler avec JSON.
JSON est un format d’échange de données léger. C’est un format populaire utilisé pour transmettre et recevoir des données entre un client et un serveur. Cependant, son application et son utilisation vont au-delà de la transmission de données. Les machines peuvent facilement générer et analyser des données JSON. L’acronyme JSON signifie JavaScript Object Notation et, comme son nom l’indique à juste titre, il s’agit d’un sous-ensemble du langage de programmation JavaScript.
JSON est un format d’échange de données standardisé et indépendant de la langue. Pratiquement tous les langages de programmation le supportent d’une manière ou d’une autre. Il a la structure suivante :
- Il a une accolade ouvrante à gauche et une accolade fermante à droite.
- Il a une collection de paires nom/valeur.
- Chaque nom est séparé par deux-points « : » de sa valeur.
- Chaque paire nom/valeur est séparée par une virgule (
,
).
Voici un extrait d’un objet JSON :
{
"name": "Chinedu Obi",
"age": 24,
"country": "Nigeria",
"languages": [
"Igbo",
"English",
"Yoruba"
],
"marital status": "single",
"employee": true,
"experience": [
{
"title": "Frontend Engineering Intern",
"company": "Andela"
},
{
"title": "Frontend Engineer",
"company": "Paystack"
}
]
}
Nous supposerons que le JSON ci-dessus est stocké dans un fichier nommé employee.json
pour les besoins des exemples de code ultérieurs.
Types de données JSON
Lorsque vous travaillez avec des objets JSON, Python convertit les types de données JSON en leurs équivalents, et vice versa. Le tableau ci-dessous montre les types de données Python et leurs équivalents JSON.
Python | Équivalent JSON |
---|---|
dict | objet |
list , tuple | déployer |
str | chaîne |
int , float , long | nombre |
True | vrai |
False | FAUX |
None | nul |
La différence entre les modules json et simplejson en Python
Il existe plusieurs modules pour encoder et décoder JSON en Python. Les deux modules les plus populaires sont json
et simplejson
. Le json
module est un package intégré à la bibliothèque standard Python, ce qui signifie que nous pouvons l’utiliser directement sans avoir à l’installer.
Le simplejson
module est un module Python externe pour encoder et décoder JSON. C’est un package open source avec une rétrocompatibilité pour Python 2.5+ et Python 3.3+. C’est aussi rapide, simple, correct et extensible.
simplejson
est mis à jour plus fréquemment, avec une optimisation plus à jour que json
, ce qui le rend plus rapide. Si vous travaillez avec une ancienne version de Python inférieure à 2.6 dans un projet hérité, alors simplejson
est votre meilleur pari.
Pour les besoins de ce didacticiel, nous nous en tiendrons au json
module.
Comment lire et écrire JSON dans un fichier en Python
Lors de la programmation en Python, nous rencontrons souvent le format de données JSON, et il est important de savoir comment lire ou écrire des données et des fichiers JSON. Connaissance préalable de gestion de fichiers en Python sera utile ici pour lire et écrire du JSON dans des fichiers.
Comment lire les fichiers JSON en Python
Tout comme toutes les autres opérations de lecture en Python, le with
déclaration peut être utilisée avec la json.load()
méthode pour lire les fichiers JSON.
Voir l’exemple de code ci-dessous :
import json
with open('employee.json', 'r', encoding='utf-8') as file_object:
employee_dict = json.load(file_object)
print(employee_dict)
Voici la sortie du code ci-dessus :
{'name': 'Chinedu Obi', 'age': 24, 'country': 'Nigeria', 'languages': ['Igbo', 'English', 'Yoruba'], 'marital status': 'single', 'employee': True, 'experience': [{'title': 'Frontend Engineering Intern', 'company': 'Andela'}, {'title': 'Frontend Engineer', 'company': 'Paystack'}]}
Dans le code ci-dessus, nous ouvrons le employee.json
fichier en mode lecture. Le json.load()
décode les données JSON dans un dictionnaire Python stocké dans la variable employee_dict
.
Écrire JSON dans un fichier en Python
Nous pouvons également effectuer une opération d’écriture avec des données JSON sur des fichiers en Python. Tout comme dans l’opération de lecture, nous utilisons le with
déclaration à côté de la json.dump()
méthode pour écrire des données JSON dans un fichier.
Considérez l’extrait de code ci-dessous :
import json
mother = {
"name": "Asake Babatunde",
"age": 28,
"marital status": "Married",
"children": ["Ayo", "Tolu", "Simi"],
"staff": False,
"next of kin": {"name": "Babatune Lanre", "relationship": "husband"},
}
with open("mother.json", "w", encoding="utf-8") as file_handle:
json.dump(mother, file_handle, indent=4)
Ici, nous créons un dictionnaire Python, mother
, qui contient des données sur une mère fictive. Nous ouvrons mother.json
en mode écriture. Puisqu’il n’y a pas un tel fichier, un est créé pour nous. Le json.dump()
la méthode encode le dictionnaire Python affecté à la mother
variable en un équivalent JSON, qui est écrit dans le fichier spécifié. Lorsque le code ci-dessus est exécuté, un mother.json
fichier contenant les données JSON apparaîtra à la racine de notre dossier.
Comment convertir un dictionnaire Python en JSON (sérialisation)
Sérialisation est le processus de conversion d’objets Python – dans la plupart des cas, un dictionnaire – en données ou en chaîne au format JSON. Lors de la sérialisation, les types Python sont encodés dans un équivalent JSON. Le json
module fournit deux méthodes — json.dump()
et json.dumps()
— pour sérialiser des objets Python au format JSON.
json.dump()
est utilisé lors de l’écriture d’un équivalent JSON d’objets Python dans un fichier.json.dumps()
(avec un « s ») est utilisé lors de la conversion d’un objet Python en une chaîne au format JSON.
Notez la syntaxe ci-dessous :
json.dump(obj, fp, indent)
json.dumps(obj, indent)
Le json.dump()
la méthode a un paramètre fp
alors que json.dumps()
ne l’a pas.
Quelques paramètres expliqués :
obj
: un objet Python à sérialiser au format JSON.fp
: un pointeur de fichier (objet) avec des méthodes telles queread()
ouwrite()
.indent
: un entier ou une chaîne non négatif, pour indiquer le niveau d’indentation pour une jolie impression de données JSON.
Exemple : Conversion d’un objet Python au format JSON avec json.dump()
Encodons un objet Python en données au format JSON équivalentes et écrivons-le dans un fichier.
Tout d’abord, nous créons un dictionnaire Python :
import json
subject = {
"name": "Biology",
"teacher": {"name": "Nana Ama", "sex": "female"},
"students_size": 24,
"elective": True,
"lesson days": ["Tuesday", "Friday"],
}
Encodons notre dictionnaire en données JSON et écrivons dans un fichier :
with open('subject.json', 'w', encoding='utf-8') as file_handle:
json.dump(subject, file_handle, indent=4)
Dans l’exemple ci-dessus, nous passons le dictionnaire, le pointeur de fichier et les arguments d’indentation au json.dump
méthode. Ci-dessous la sortie de notre code. Lorsque le code est exécuté, un subject.json
Le fichier contenant les données JSON attendues se trouve dans le dossier racine de notre projet :
{
"name": "Biology",
"teacher": {
"name": "Nana Ama",
"sex": "female"
},
"students_size": 24,
"elective": true,
"lesson days": [
"Tuesday",
"Friday"
]
}
Notre sortie a une jolie sortie d’impression car nous avons ajouté une valeur d’argument d’indentation de 4
.
Exemple : Conversion d’un objet Python au format JSON avec json.dumps()
Dans cet exemple, nous allons encoder un objet Python en une chaîne JSON. Nous avons créé un subject
dictionnaire avant, afin que nous puissions le réutiliser ici.
Prenons un exemple avec le json.dumps()
méthode:
json_data = json.dumps(subject, indent=4)
print(json_data)
print(type(json_data))
Voici la sortie du code ci-dessus :
{
"name": "Biology",
"teacher": {
"name": "Nana Ama",
"sex": "female"
},
"students_size": 24,
"elective": true,
"lesson days": [
"Tuesday",
"Friday"
]
}
<class 'str'>
Comme indiqué précédemment, le json.dumps()
La méthode est utilisée pour convertir des objets Python en une chaîne au format JSON. Nous pouvons voir depuis la console que nos données JSON sont de type str
.
Comment convertir JSON en dictionnaire Python (désérialisation)
Désérialisation de JSON est le processus de décodage des objets JSON en objets Python ou types Python équivalents. Nous pouvons convertir des données au format JSON en objets Python en utilisant deux méthodes — json.load()
et json.loads()
— qui sont fournis par le json
module.
json.load()
est utilisé lors de la lecture de données au format JSON à partir d’un fichier.json.loads()
(avec un « s ») est utilisé lors de l’analyse d’une chaîne JSON dans un dictionnaire Python.
Notez la syntaxe ci-dessous :
json.load(fp)
json.loads(s)
json.dump()
a un paramètre fp
alors que json.dumps()
a un paramètre s
. Les autres paramètres restent les mêmes.
Quelques paramètres expliqués :
fp
: un pointeur de fichier (objet) avec des méthodes telles queread()
ouwrite()
.s
: unstr
,bytes
oubytearray
instance contenant un document JSON.
Exemple : conversion d’un objet JSON en objet Python avec json.load()
Voici le contenu d’un nouveau fichier JSON nommé students.json
:
[
{
"name": "Edidiong Ime",
"subject": "Chemistry",
"score": 91,
"class": "SS 3"
},
{
"name": "Jesse Umoh",
"subject": "Chemistry",
"score": 85,
"class": "SS 3"
},
{
"name": "Kingsley Chuks",
"subject": "Chemistry",
"score": 68,
"class": "SHS 3"
},
{
"name": "Martha Sam",
"subject": "Chemistry",
"score": 79,
"class": "SHS 3"
}
]
Dans cet exemple, nous allons décoder les données JSON du students.json
fichier en objets Python :
import json
with open('students.json', 'r', encoding='utf-8') as file_handle:
students_list = json.load(file_handle)
for student in students_list:
print(student)
Voici la sortie du code ci-dessus :
{'name': 'Edidiong Ime', 'subject': 'Chemistry', 'score': 91, 'class': 'SS 3'}
{'name': 'Jesse Umoh', 'subject': 'Chemistry', 'score': 85, 'class': 'SS 3'}
{'name': 'Kingsley Chuks', 'subject': 'Chemistry', 'score': 68, 'class': 'SHS 3'}
{'name': 'Martha Sam', 'subject': 'Chemistry', 'score': 79, 'class': 'SHS 3'}
Dans l’extrait de code ci-dessus, un fichier JSON contenant une liste d’étudiants est en cours d’analyse. Les données JSON du fichier file_handle
est passé au json.load()
méthode, qui le décode dans une liste de dictionnaires Python. Les éléments de la liste sont ensuite imprimés sur la console.
Exemple : conversion d’un objet JSON en dictionnaire Python avec json.loads()
Dans cet exemple, décodons les données JSON d’un point de terminaison d’API à partir de Espace réservé JSON. Le requests
module doit être installé avant de continuer avec cet exemple :
import json
import requests
response = requests.get("https://jsonplaceholder.typicode.com/comments/2")
comment = json.loads(response.text)
print(comment)
Voici la sortie du code ci-dessus :
{'postId': 1, 'id': 2, 'name': 'quo vero reiciendis velit similique earum', 'email': 'Jayne_Kuhic@sydney.com', 'body': 'est natus enim nihil est dolore omnis voluptatem numquam\net omnis occaecati quod ullam at\nvoluptatem error expedita pariatur\nnihil sint nostrum voluptatem reiciendis et'}
Dans le code Python ci-dessus, nous obtenons une réponse d’un point de terminaison qui renvoie une chaîne au format JSON. Nous passons la réponse comme argument à la json.loads()
méthode pour le décoder dans un dictionnaire Python.
Conclusion
Dans le développement Web moderne, JSON est le format de facto pour l’échange de données entre un serveur et des applications Web. De nos jours, les points de terminaison de l’API REST renvoient des données au format JSON, il est donc important de comprendre comment travailler avec JSON.
Python a des modules comme json
et simplejson
pour lire, écrire et analyser JSON. Le json
module est livré avec la bibliothèque standard Python, tandis que simplejson
est un package externe et doit être installé avant d’être utilisé.
Lors de la création d’API RESTful en Python ou de l’utilisation d’API externes dans nos projets, nous aurons souvent besoin de sérialiser des objets Python en JSON et de les désérialiser en Python. Les approches présentées dans cet article sont utilisées par de nombreux projets populaires. Les étapes sont généralement les mêmes.
Le code de ce tutoriel se trouve sur GitHub.
Source link