Comment analyser JSON en Python - Étapes faciles

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 simple à analyser et à générer. Pour tout développeur Python, l'analyse est cruciale lorsqu'il s'agit de traiter du contenu provenant d'API, de fichiers de configuration ou d'autres sources d'informations stockées. Cet article vous présente les bases de l'analyse JSON à l'aide du module Python, y compris la manière d'utiliser json.dump python pour sauvegarder le contenu.

Comprendre JSON et sa structure

JSON structure les détails en paires clé-valeur. Voici un exemple de base d'un objet :


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

Cet exemple d'analyse python json contient des éléments communs : une chaîne, un nombre, un booléen et un tableau. Se familiariser avec cette structure facilite grandement le travail en Python.

Interagir avec JSON en Python

L'implémentation de Python permet d'analyser facilement les chaînes json en utilisant le module intégré de Python. Ce module comprend des méthodes telles que json.loads() pour lire une chaîne et json.load() pour lire un fichier. Inversement, json.dumps() et json.dump Python sont utilisés pour écrire des informations dans une chaîne et un fichier, respectivement.

Lire les données JSON

Voyons maintenant comment lire des données JSON, ce que nous verrons plus loin.

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

Si vous voulez lire du json en Python, utilisez json.loads() pour analyser une chaîne et la convertir en un objet Python :


import json

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

print(data)

Sortie :

1.png

Extraire JSON d'un fichier

Pour extraire des informations d'un fichier, utilisez la méthode suivante : json.load() et ouvrez un fichier json en python :


import json

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

print(data)

Sortie :

2.png

Écrire des données JSON

Avant d'écrire, vous avez souvent besoin de lire ou de charger des informations existantes - et c'est là que la méthode python load json file devient utile. Une fois les informations chargées correctement, vous pouvez les manipuler et les écrire dans différents formats.

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

Pour écrire des informations dans une chaîne de caractères, utilisez la méthode Python 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 les détails de ce fichier, utilisez la méthode Python 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 avancée de JSON imbriqué

Les objets imbriqués sont courants lorsque l'on travaille avec des structures d'information plus complexes, qui peuvent 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é

Le langage ne peut pas transformer automatiquement tous les objets personnalisés en JSON. Dans ce cas, vous devrez créer 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é

Pour désérialiser des objets personnalisés, vous devez mettre en œuvre un décodeur personnalisé qui sait comment les traiter.


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

Traitement des problèmes courants

Travailler avec des données détaillées peut conduire à plusieurs erreurs courantes, en particulier lors de l'analyse, de la génération ou de l'accès à un contenu structuré. L'utilisation d'un parseur json python fiable peut aider à identifier et à résoudre ces problèmes plus efficacement. Voici quelques-unes des erreurs les plus courantes :

Format JSON non valide

Une erreur fréquente lors de l'analyse d'un fichier json est la rencontre d'un format invalide. Il 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

Gestion des clés manquantes

Il arrive parfois que le contenu ne contienne pas toutes les clés attendues. L'utilisation de la méthode get() vous permet de gérer en toute sécurité les clés manquantes en renvoyant une valeur par défaut au lieu de déclencher une erreur.


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 JSON

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


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 consiste généralement à récupérer du contenu auprès de services qui renvoient les informations obtenues. Voici un exemple qui utilise la bibliothèque de requêtes ainsi que le point d'accès https://httpbin.org/anything.

Avant de commencer, vérifiez que vous avez installé le paquet de requêtes :


pip install requests

Lorsque vous travaillez avec du contenu structuré, vous pouvez utiliser la bibliothèque requests pour faciliter les choses. Il suffit d'émettre une requête GET et d'indiquer l'URL via requests.get(url). Ensuite, vous pouvez analyser la réponse avec response.json(). À partir de là, il est facile d'accéder à des informations spécifiques telles que les en-têtes, l'agent utilisateur, l'origine ou l'URL de la requête et de les imprimer si nécessaire.

Le code contient une gestion efficace des erreurs ; il capture json.JSONDecodeError en cas d'erreur de décodage et KeyError en cas d'absence d'une clé spécifique, ce qui permet au programme d'être protégé contre les pannes dues à 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 développeur doit savoir comment analyser un fichier json en Python. Avec le module et la meilleure façon de le faire mis en évidence par ce manuel, vous serez en mesure de lire, d'écrire et de déboguer assez rapidement. Cela signifie que vous devez tester votre code régulièrement et utiliser les bons outils et les dernières fonctionnalités pour être plus performant. Ce guide se concentre sur l'analyse des données json en python pour vous aider à maîtriser ces tâches efficacement.

Lorsque vous faites du web scraping, l'analyse devient essentielle car le contenu des API web se présente souvent sous ce format. Savoir le traiter et le manipuler vous permet d'extraire efficacement des informations précieuses à partir d'une variété de sources.

Conclusion

L'analyse est une compétence clé pour tout développeur travaillant avec des API web, des fichiers de configuration ou des sources externes. Le traitement des informations - qu'il s'agisse de lire une chaîne ou un fichier, d'écrire une sortie structurée ou de traiter des objets imbriqués et personnalisés - est simplifié grâce au module intégré de Python. Les développeurs peuvent débloquer les méthodes Python json.load(), json.loads(), json.dump(), json.dumps() et apprendre à traiter les problèmes courants, à mettre en œuvre des encodeurs ou des décodeurs personnalisés et à créer des applications sur mesure pour des interactions d'informations qui sont robustes et fiables. Étant donné que ce format est un standard web pour l'échange d'informations, ces compétences sont précieuses pour le scraping, la manipulation de contenu et l'intégration de multiples services via des API. L'utilisation d'un code python simple pour lire un fichier json rend l'analyse d'un fichier json en python accessible à tout projet, tandis que json.dump python permet de sauvegarder le matériel de manière efficace.

Commentaires:

0 Commentaires