Menu
Coddy logo textTech

Décodage JSON personnalisé

Leçon 9 sur 9 du cours Python et JSON de Coddy.

Le décodage JSON personnalisé est une fonctionnalité avancée du module json de Python qui vous permet de contrôler la manière dont les données JSON sont converties en objets Python. Cela est particulièrement utile lorsque vous traitez des structures de données complexes ou lorsque vous souhaitez créer des objets Python spécifiques à partir de données JSON.

La classe JSONDecoder

Pour implémenter un décodage JSON personnalisé, vous devez créer une sous-classe de la classe json.JSONDecoder et surcharger sa méthode object_hook :


import json

class CustomDecoder(json.JSONDecoder):
    def object_hook(self, dct):
        # Logique de décodage personnalisée ici
        return dct

Utilisation du décodeur personnalisé

Une fois que vous avez défini votre décodeur personnalisé, vous pouvez l'utiliser avec json.loads() ou json.load() :


decoded_object = json.loads(json_string, cls=CustomDecoder)

Exemple : Décodage vers des objets personnalisés

Examinons un exemple pratique où nous décodons des données JSON en objets Python personnalisés :


import json
from datetime import datetime

class Person:
    def __init__(self, name, birthdate):
        self.name = name
        self.birthdate = birthdate

class CustomDecoder(json.JSONDecoder):
    def object_hook(self, dct):
        if 'name' in dct and 'birthdate' in dct:
            return Person(dct['name'], datetime.fromisoformat(dct['birthdate']))
        return dct

json_string = '{"name": "Alice", "birthdate": "1990-05-15"}'
person = json.loads(json_string, cls=CustomDecoder)

print(type(person))  # Sortie : <class '__main__.Person'>
print(person.name)   # Sortie : Alice
print(person.birthdate)  # Sortie : 1990-05-15 00:00:00

Points clés

  • La méthode object_hook est appelée pour chaque objet décodé.
  • Vous pouvez vérifier des clés ou des motifs spécifiques pour déterminer comment décoder l'objet.
  • Renvoyez l'objet tel quel si aucun décodage personnalisé n'est nécessaire pour cette structure particulière.
  • Les décodeurs personnalisés sont utiles pour créer des objets spécifiques au domaine directement à partir de données JSON.

En utilisant des décodeurs JSON personnalisés, vous pouvez intégrer de manière transparente les données JSON dans le modèle d'objet de votre application Python, rendant la désérialisation des données plus flexible et alignée sur vos besoins spécifiques.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

challenge icon

Défi

Facile

Créez un décodeur JSON personnalisé pour un système de données météorologiques. Le décodeur doit convertir des chaînes JSON en objets WeatherData avec des attributs et des conversions spécifiques. Implémentez ce qui suit :

  1. Définissez une classe WeatherData avec les attributs : location, temperature, humidity et conditions.
  2. Créez une sous-classe JSONDecoder personnalisée qui :
    • Convertit la température de Fahrenheit en Celsius, arrondie à une décimale.
    • S'assure que l'humidité est représentée sous forme de pourcentage (par exemple, 0.65 devient 65%).
    • Met en majuscule chaque mot de la chaîne conditions.
  3. Implémentez une fonction qui prend une chaîne JSON, utilise le décodeur personnalisé pour l'analyser et renvoie une chaîne formatée avec les données météorologiques.

L'entrée suivante sera fournie :


{"location": "new york", "temperature": 72, "humidity": 0.65, "conditions": "partly cloudy"}

Affichez la chaîne formatée résultante au format suivant :

"Location: [location], Temperature: [temp]°C, Humidity: [humidity], Conditions: [conditions]"

Essayez vous-même

Here's a suitable starter code for the challenge:

```python
import json

# Read input
json_string = input()

class WeatherData:
    def __init__(self, location, temperature, humidity, conditions):
        self.location = location
        self.temperature = temperature
        self.humidity = humidity
        self.conditions = conditions

class CustomJSONDecoder(json.JSONDecoder):
    def __init__(self, *args, **kwargs):
        json.JSONDecoder.__init__(self, object_hook=self.object_hook, *args, **kwargs)

    def object_hook(self, dct):
        # TODO: Implement the custom decoding logic here
        pass

def parse_weather_data(json_string):
    # TODO: Implement the parsing function here
    pass

# TODO: Use the CustomJSONDecoder and parse_weather_data function to process the input

# Placeholder for the result
result = "Location: [location], Temperature: [temp]°C, Humidity: [humidity], Conditions: [conditions]"

# Output the result
print(result)
```

Toutes les leçons de Python et JSON