Introduction
JSON (JavaScript Object Notation) est un format de données populaire pour stocker des données sous une forme sérialisée et lisible par l'homme. Il est couramment utilisé pour transmettre des données entre un serveur et une application web et est également un excellent choix pour stocker des données dans une base de données NoSQL. En Python, nous pouvons utiliser le module json pour travailler avec les données JSON.
Objectifs
- Lire et écrire des fichiers JSON
- Sérialiser et désérialiser des données JSON
Présentation du JSON
JSON (JavaScript Object Notation) est un format léger d'échange de données qui est facile à lire et à écrire pour les humains et facile à analyser et à générer pour les machines. Il est basé sur un sous-ensemble du langage de programmation JavaScript, Standard ECMA-262 3ème édition - décembre 1999. JSON est un format de texte complètement indépendant du langage, mais utilise des conventions familières aux programmeurs des langages de la famille C, y compris C, C++, C#, Java, JavaScript, Perl, Python et de nombreux autres. Ces propriétés rendent JSON un langage d'échange de données idéal.
La structure de base de JSON est composée d'objets, qui sont des collections de paires clé-valeur, et d'arrays, qui sont des listes ordonnées de valeurs.
Voici un exemple d'objet JSON :
{
"name": "Alice",
"age": 26,
"city": "New York"
}
Cet objet JSON a trois paires clé-valeur :
- "name" : "Alice"
- "age" : 26
- "city" : "New York"
Voici un exemple d'un tableau JSON :
["apple", "banana", "cherry"]
Ce tableau JSON a trois valeurs : "apple", "banana" et "cherry".
Un objet JSON peut contenir plusieurs paires clé-valeur et tableaux, et un tableau JSON peut contenir plusieurs objets et tableaux. Voici un exemple d'une structure JSON plus complexe :
{
"employees": [
{ "firstName": "John", "lastName": "Doe" },
{ "firstName": "Anna", "lastName": "Smith" },
{ "firstName": "Peter", "lastName": "Jones" }
],
"owners": [
{ "name": "Alice", "age": 30 },
{ "name": "Bob", "age": 35 }
],
"office": {
"name": "Acme Inc.",
"location": "New York"
}
}
Cet objet JSON a trois paires clé-valeur :
- "employees" : un tableau d'objets employés
- "owners" : un tableau d'objets propriétaires
- "office" : un objet bureau
Module Json
Pour analyser un objet JSON en Python, nous pouvons utiliser le module json. Le module json est une partie de la bibliothèque standard de Python, donc nous n'avons pas besoin de l'installer séparément.
Ouvrez une nouvelle session d'interpréteur Python et tapez le code suivant :
python3
Voici un exemple de la manière d'analyser l'objet JSON de l'exemple précédent :
import json
json_strings = '{"employees": [{ "firstName": "John", "lastName": "Doe"}, ], "owners": [{ "name": "Alice", "age": 30 }, { "name": "Bob", "age": 35 }], "office": {"name": "Acme Inc."}}'
## Analyser l'objet JSON
data = json.loads(json_strings)
## Accéder aux données
employees = data['employees']
owners = data['owners']
office = data['office']
## Afficher les données
print(employees)
print(owners)
print(office)
Cela produira la sortie suivante :
[{'firstName': 'John', 'lastName': 'Doe'}]
[{'name': 'Alice', 'age': 30}, { "name": "Bob", "age": 35 }]
{'name': 'Acme Inc.'}
Vous pouvez ensuite accéder aux données de l'objet JSON en utilisant des clés et des index, tout comme vous le feriez avec un dictionnaire ou une liste Python. Par exemple, pour accéder au prénom du premier employé, vous pouvez utiliser le code suivant :
first_employee = employees[0]
first_name = first_employee['firstName']
print(first_name)
Cela produira la sortie suivante :
John
Vous pouvez également parcourir les tableaux et accéder aux données de chaque élément. Par exemple, pour afficher le nom et l'âge de chaque propriétaire, vous pouvez utiliser le code suivant :
for owner in owners:
name = owner['name']
age = owner['age']
print(f'{name} a {age} ans.')
Cela produira la sortie suivante :
Alice a 30 ans.
Bob a 35 ans.
Lecture de fichiers JSON
Commenceons par lire un fichier JSON. Supposons que nous ayons un fichier employees.json avec le contenu suivant :
{
"employees": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "Anna",
"lastName": "Smith"
},
{
"firstName": "Peter",
"lastName": "Jones"
}
]
}
employees.json existe dans le répertoire /home/labex/project.
Pour lire ce fichier en Python, nous pouvons utiliser le code suivant :
import json
## Ouvrir le fichier
with open('/home/labex/project/employees.json', 'r') as file:
## Charger le contenu du fichier dans une variable
data = json.load(file)
## Afficher le contenu du fichier
print(data)
Cela produira la sortie suivante :
{'employees': [{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]}
Nous pouvons accéder aux données dans le fichier en utilisant les clés de l'objet JSON, tout comme nous le ferions avec un dictionnaire Python. Par exemple, pour accéder à la liste des employés, nous pouvons utiliser la clé employees :
employees = data['employees']
print(employees)
Cela produira la sortie suivante :
[{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]
Nous pouvons également parcourir la liste des employés et afficher leurs noms :
for employee in employees:
print(employee['firstName'], employee['lastName'])
Cela produira la sortie suivante :
John Doe
Anna Smith
Peter Jones
Écriture de fichiers JSON
Maintenant que nous savons lire un fichier JSON, voyons comment écrire dans un. Nous pouvons utiliser la fonction json.dump() pour écrire des données dans un fichier JSON.
Supposons que nous ayons une liste de dictionnaires contenant des informations sur des étudiants. Nous pouvons écrire ces données dans un fichier appelé students.json comme ceci :
import json
## Une liste de dictionnaires
students = [
{ "name": "Alice", "age": 26, "major": "Computer Science" },
{ "name": "Bob", "age": 27, "major": "Economics" },
{ "name": "Charlie", "age": 25, "major": "Physics" }
]
## Ouvrir le fichier
with open('students.json', 'w') as file:
## Écrire les données dans le fichier
json.dump(students, file)
Maintenant, vérifions que les données ont été correctement écrites :
with open('students.json', 'r') as file:
data = json.load(file)
print(data)
Cela produira la sortie suivante :
[
{ "name": "Alice", "age": 26, "major": "Computer Science" },
{ "name": "Bob", "age": 27, "major": "Economics" },
{ "name": "Charlie", "age": 25, "major": "Physics" }
]
Nous pouvons également utiliser la fonction json.dumps() pour convertir un objet Python en une chaîne JSON, que nous pouvons ensuite enregistrer dans un fichier ou envoyer sur le réseau. Voici un exemple :
## Convertir la liste de dictionnaires en une chaîne JSON
json_string = json.dumps(students)
print(json_string)
## Enregistrer la chaîne dans un fichier
with open('students.json', 'w') as file:
file.write(json_string)
## Maintenant, vérifions que les données ont été correctement écrites
with open('students.json', 'r') as file:
data = json.load(file)
print(data)
Cela produira la même sortie que l'exemple précédent.
Objet Python et chaîne JSON
Un objet Python est une collection de données sous forme de listes, de dictionnaires, etc., stockées en mémoire. Une chaîne JSON, en revanche, est une représentation sérialisée d'un objet JSON. C'est une chaîne de caractères qui représente les données de l'objet JSON, mais elle n'est pas stockée en mémoire comme un objet réel.
Voici un exemple de la manière d'utiliser la fonction read() pour lire le contenu de students.json :
with open('students.json', 'r') as file:
json_string = file.read()
print(json_string)
Cela produira la sortie suivante :
[{"name": "Alice", "age": 26, "major": "Computer Science"}, {"name": "Bob", "age": 27, "major": "Economics"}, {"name": "Charlie", "age": 25, "major": "Physics"}]
Lorsque vous essayez d'obtenir le premier élément de json_string, vous obtiendrez le premier caractère de la chaîne :
print(json_string[0])
[
Cela est dû au fait que json_string est une chaîne, pas une liste (objet Python). Pour la convertir en liste, nous pouvons utiliser la fonction json.loads() :
import json
## Convertir la chaîne JSON en un objet Python
python_object = json.loads(json_string)
print(python_object)
La sortie est similaire à celle ci-dessus, avec la différence entre les guillemets simples et doubles.
[{'name': 'Alice', 'age': 26,'major': 'Computer Science'}, {'name': 'Bob', 'age': 27,'major': 'Economics'}, {'name': 'Charlie', 'age': 25,'major': 'Physics'}]
Maintenant, nous pouvons accéder au premier élément de la liste :
print(python_object[0])
{ "name": "Alice", "age": 26, "major": "Computer Science" }
Les débutants ont souvent du mal à distinguer l'objet Python de la chaîne JSON, donc faites attention.
Résumé
Félicitations ! Vous avez terminé le laboratoire sur les fichiers JSON. Vous avez appris à lire et écrire des fichiers JSON en Python. Vous avez également appris à travailler avec les données JSON en Python.



