Guide d'analyse JSON en Python

Commentaires: 0

JSON est l'abréviation de JavaScript Object Notation. Il est non seulement léger, mais aussi facile à lire et à écrire pour les humains. De même, les machines le trouvent facile à analyser et à générer. L'analyse JSON est extrêmement importante pour tout développeur Python lorsqu'il travaille avec des données provenant d'API, de fichiers de configuration ou d'autres sources d'informations stockées. Cet article vous présente les procédures de base pour analyser JSON à l'aide du module JSON de Python.

Compréhension de JSON et de sa structure

JSON représente les données sous forme de paires clé-valeur, à l'instar d'un dictionnaire Python. Voici un exemple de base d'un objet JSON :

{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"]
}

Cet objet JSON comprend une chaîne de caractères, un nombre, un booléen et un tableau. La compréhension de cette structure est fondamentale pour analyser et manipuler les données JSON en Python.

Travailler avec JSON en Python

Le module json de Python simplifie l'analyse des chaînes et des fichiers JSON. Ce module comprend des méthodes telles que json.loads() pour lire JSON à partir d'une chaîne, et json.load() pour lire JSON à partir d'un fichier. Inversement, json.dumps() et json.dump() sont utilisées pour écrire JSON dans une chaîne et un fichier, respectivement.

Lecture de données JSON

Il existe plusieurs façons de lire des données JSON, que nous allons examiner par la suite.

Lecture de JSON à partir d'une chaîne de caractères

Pour lire des données JSON à partir d'une chaîne, utilisez la méthode json.loads() :

import json

json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)

print(data)

Sortie:

1.png

Lecture de JSON à partir d'un fichier

Pour lire des données JSON à partir d'un fichier, utilisez la méthode json.load() :

import json

with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

Sortie:

2.png

Ecriture de données JSON

Voici différentes façons d'écrire des données JSON :

Écrire JSON dans une chaîne de caractères

Pour écrire des données JSON dans une chaîne, utilisez la méthode json.dumps() :

import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

json_string = json.dumps(data)
print(json_string)

Sortie:

3.png

Écrire JSON dans un fichier

Pour écrire des données JSON dans un fichier, utilisez la méthode json.dump() :

import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

with open('data.json', 'w') as file:
    json.dump(data, file)

Gestion des JSON imbriqués

Les objets JSON imbriqués sont courants lorsqu'on travaille avec des structures de données plus complexes. Python peut facilement gérer ces structures imbriquées.

import json

nested_json_string = '''
{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"],
    "address": {
        "street": "123 Main St",
        "city": "Wonderland"
    }
}
'''

data = json.loads(nested_json_string)
print(data['address']['city'])

Sortie:

4.png

Encodeur JSON personnalisé

Parfois, vous devez convertir des objets Python personnalisés en JSON. Cela nécessite un encodeur personnalisé.

import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

class StudentEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Student):
            return obj.__dict__
        return super().default(obj)

student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)

Sortie:

5.png

Décodeur JSON personnalisé

De même, pour décoder des données JSON en objets Python personnalisés, vous avez besoin d'un décodeur personnalisé.

import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

def student_decoder(dct):
    return Student(dct['name'], dct['age'], dct['is_student'])

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)

Sortie:

6.png

Traiter les problèmes courants

Travailler avec des données JSON peut conduire à plusieurs erreurs courantes, notamment lors de l'analyse, de la génération ou de l'accès aux données JSON. Voici quelques-unes des plus courantes :

Format JSON non valide

Une erreur fréquente lors de l'analyse JSON est la rencontre d'un format JSON non valide. JSON nécessite des guillemets doubles autour des clés et des valeurs de chaîne, ainsi qu'une imbrication correcte des crochets et des accolades.

import json

invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
    data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
    print(f"Invalid JSON format: {e}")

Sortie:

7.png

Traitement des clés manquantes

Lors de l'analyse des données JSON, vous pouvez rencontrer des clés manquantes. Utilisez la méthode get pour fournir une valeur par défaut si une clé est manquante.

import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)

Débogage des problèmes d'analyse de JSON

Utilisez le module pdb pour définir des points d'arrêt et déboguer votre code d'analyse JSON.

import json
import pdb

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)

Exemple pratique de manipulation de JSON dans le cadre du web scraping

Le web scraping implique souvent l'extraction de données à partir d'API web qui renvoient des réponses JSON. Voici un exemple compact utilisant la bibliothèque requests et le point de terminaison https://httpbin.org/anything.

Tout d'abord, assurez-vous que la bibliothèque requests est installée :

pip install requests

Ce code importe requests pour les requêtes HTTP et json pour la gestion des données JSON. Il envoie une requête GET à l'URL cible en utilisant requests.get(url) et analyse la réponse JSON avec response.json(), la transformant en un dictionnaire Python. Nous extrayons et imprimons des données particulières telles que les en-têtes, l'agent utilisateur, l'origine et l'URL.

Le code contient une solide gestion des erreurs ; il capture json.JSONDecodeError lorsqu'une erreur de décodage JSON se produit, et KeyError lorsqu'une clé spécifique est absente, ce qui permet au programme d'être protégé contre les plantages dus à l'absence de données. Cette robustesse du code lui permet donc de gérer parfaitement les tâches réelles de web scraping.

import requests
import json

url = 'https://httpbin.org/anything'

response = requests.get(url)

try:
    data = response.json()

    # Extraire des données spécifiques de la réponse JSON
    headers = data['headers']
    user_agent = headers.get('User-Agent', 'N/A')
    origin = data.get('origin', 'N/A')
    url = data.get('url', 'N/A')

    print(f"User Agent: {user_agent}")
    print(f"Origin: {origin}")
    print(f"URL: {url}")

except json.JSONDecodeError:
    print("Error decoding JSON response")

except KeyError as e:
    print(f"Key error: {e} not found in the JSON response")

8.png

Tout codeur Python doit savoir comment analyser JSON. Grâce au module JSON et à la meilleure façon de le faire mise en évidence par ce manuel, vous serez en mesure de lire, d'écrire et de déboguer des données JSON assez rapidement. Cela implique que vous testiez régulièrement vos codes et que vous utilisiez les bons outils et les fonctionnalités les plus récentes disponibles dans Python pour améliorer vos compétences en matière de manipulation de JSON.

Lorsque vous effectuez du web scraping, l'analyse JSON est importante, étant donné que les données extraites des API web apparaissent généralement sous la forme de JSON. En outre, vous pouvez extraire des informations de diverses sources web de manière efficace si vous savez analyser et manipuler les données JSON de manière adéquate.

Commentaires:

0 Commentaires