Techniques avancées de sérialisation
Gestion des objets de date et d'heure
Utilisation d'un encodeur JSON personnalisé pour les objets datetime
import json
from datetime import datetime, date
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, (datetime, date)):
return obj.isoformat()
return super().default(obj)
## Example usage
current_time = {
"timestamp": datetime.now(),
"date": date.today()
}
json_string = json.dumps(current_time, cls=DateTimeEncoder)
print(json_string)
JSON compact vs. JSON lisible
## Compact serialization
compact_json = json.dumps(data, separators=(',', ':'))
## Readable serialization with indentation
readable_json = json.dumps(data, indent=4)
Gestion des grandes structures de données
Sérialisation JSON en flux continu (streaming)
def stream_large_data(large_data):
with open('large_data.json', 'w') as file:
json.dump(large_data, file,
cls=DateTimeEncoder,
stream=file)
Workflow avancé de gestion des erreurs
graph TD
A[Input Data] --> B{Validate Structure}
B -->|Valid| C[Prepare Serialization]
B -->|Invalid| D[Raise Validation Error]
C --> E{Choose Encoder}
E -->|Standard| F[Basic Serialization]
E -->|Custom| G[Advanced Encoding]
F --> H[Output JSON]
G --> H
Comparaison des techniques de sérialisation
Technique |
Cas d'utilisation |
Performances |
Complexité |
Sérialisation de base |
Objets simples |
Haute |
Faible |
Encodeur personnalisé |
Objets complexes |
Moyenne |
Moyenne |
Sérialisation en flux continu (streaming) |
Grandes séries de données |
Basse |
Haute |
Techniques d'encodage avancées
Sérialisation récursive d'objets
def recursive_serializer(obj):
if hasattr(obj, '__dict__'):
return {
key: recursive_serializer(value)
for key, value in obj.__dict__.items()
}
elif isinstance(obj, (list, tuple)):
return [recursive_serializer(item) for item in obj]
return obj
class NestedObject:
def __init__(self, name, details):
self.name = name
self.details = details
## Example usage
nested_data = NestedObject("LabEx", {"version": 2.0})
serialized_data = json.dumps(nested_data, default=recursive_serializer)
Considérations de sécurité
Prévention des vulnérabilités de sérialisation
- Limiter la profondeur de récursion
- Valider les données d'entrée
- Utiliser des méthodes de sérialisation sécurisées
- Mettre en œuvre des vérifications de type
Techniques avancées clés
- Encodeurs JSON personnalisés
- Gestion des objets
datetime
- Optimisation des performances
- Sérialisation récursive
- Sérialisation en flux continu (streaming) de grandes séries de données
En maîtrisant ces techniques avancées, vous pouvez gérer avec confiance et efficacité des scénarios de sérialisation complexes en Python.