Продвинутые методы сериализации
Обработка объектов даты и времени
Использование пользовательского кодировщика JSON для объектов 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)
Оптимизация производительности сериализации
Компактный vs. удобочитаемый JSON
## Compact serialization
compact_json = json.dumps(data, separators=(',', ':'))
## Readable serialization with indentation
readable_json = json.dumps(data, indent=4)
Обработка больших структур данных
Потоковая сериализация JSON
def stream_large_data(large_data):
with open('large_data.json', 'w') as file:
json.dump(large_data, file,
cls=DateTimeEncoder,
stream=file)
Продвинутый алгоритм обработки ошибок
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
Сравнение методов сериализации
Метод |
Сценарий использования |
Производительность |
Сложность |
Базовая сериализация |
Простые объекты |
Высокая |
Низкая |
Пользовательский кодировщик |
Сложные объекты |
Средняя |
Средняя |
Потоковая сериализация |
Большие наборы данных |
Низкая |
Высокая |
Продвинутые методы кодирования
Рекурсивная сериализация объектов
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)
Безопасность
Предотвращение уязвимостей в сериализации
- Ограничьте глубину рекурсии
- Проверяйте входные данные
- Используйте безопасные методы сериализации
- Реализуйте проверку типов
Основные продвинутые методы
- Пользовательские кодировщики JSON
- Обработка объектов
datetime
- Оптимизация производительности
- Рекурсивная сериализация
- Потоковая обработка больших наборов данных
Освоив эти продвинутые методы, вы сможете уверенно и эффективно справляться с комплексными сценариями сериализации в Python.