В программировании на Python часто возникают ситуации, когда нужно сериализовать объекты в формат JSON. Однако, стандартный модуль json не способен сериализовать все типы объектов. Одним из таких типов, который вызывает проблемы, является datetime.datetime.
Попытка сериализовать словарь, содержащий объект datetime, приведет к ошибке TypeError: datetime.datetime is not JSON serializable. Например:
import datetime
import json
sample = {}
sample['title'] = "String"
sample['somedate'] = datetime.datetime.now()
json.dumps(sample)
Этот код вызовет упомянутую выше ошибку. Проблема заключается в том, что JSON не имеет встроенного типа для даты и времени, поэтому datetime объекты не могут быть прямо сериализованы.
Существует несколько способов обойти эту проблему. Один из них — преобразовать объект datetime в строку перед сериализацией. Это можно сделать с помощью метода isoformat():
import datetime
import json
sample = {}
sample['title'] = "String"
sample['somedate'] = datetime.datetime.now().isoformat()
json.dumps(sample)
В этом случае json.dumps() успешно сериализует словарь, и somedate теперь представлен в формате ISO 8601.
Другой способ — использование параметра default в функции json.dumps(). Этот параметр принимает функцию, которая будет вызываться для объектов, которые не могут быть сериализованы. Можно использовать его для преобразования datetime объектов в строки:
import datetime
import json
def datetime_handler(x):
if isinstance(x, datetime.datetime):
return x.isoformat()
raise TypeError("Unknown type")
sample = {}
sample['title'] = "String"
sample['somedate'] = datetime.datetime.now()
json.dumps(sample, default=datetime_handler)
В этом примере, если json.dumps() столкнется с объектом datetime, он будет преобразован в строку с помощью isoformat(). Если же будет встречен неизвестный тип, будет вызвано исключение TypeError.
Эти методы позволяют обойти проблему сериализации datetime объектов в JSON в Python.
Перейти в телеграм, чтобы получить результаты теста





Забрать
Добавить комментарий