Fermer

juin 18, 2023

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

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
dictobjet
list, tupledéployer
strchaîne
int, float, longnombre
Truevrai
FalseFAUX
Nonenul

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 fpalors 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 que read() ou write().
  • 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 fpalors 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 que read() ou write().
  • s: un str, bytes ou bytearray 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