datetime.date (2014, 4, 25) не является JSON-сериализуемым в Django

Я последовал за тем, как преодолеть «datetime.datetime не JSON serializable» в python? но это не помогает

Я пробовал этот код

>>> import datetime >>> a =datetime.date(2014, 4, 25) >>> from bson import json_util >>> b = json.dumps(a,default = json_util.default) Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/lib/python2.7/json/__init__.py", line 250, in dumps sort_keys=sort_keys, **kw).encode(obj) File "/usr/lib/python2.7/json/encoder.py", line 207, in encode chunks = self.iterencode(o, _one_shot=True) File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode return _iterencode(o, 0) File "/home/.../python2.7/site-packages/bson/json_util.py", line 256, in default raise TypeError("%r is not JSON serializable" % obj) TypeError: datetime.date(2014, 4, 25) is not JSON serializable 

Может ли кто-нибудь помочь мне с сериализатором datetime.date и десериализатором.

5 Solutions collect form web for “datetime.date (2014, 4, 25) не является JSON-сериализуемым в Django”

Вы также можете сделать это:

 def date_handler(obj): return obj.isoformat() if hasattr(obj, 'isoformat') else obj print json.dumps(data, default=date_handler) 

Отсюда .

Обновление согласно комментариям JFSebastian

 def date_handler(obj): if hasattr(obj, 'isoformat'): return obj.isoformat() else: raise TypeError print json.dumps(data, default=date_handler) 

Преобразуйте дату в строку, а затем попробуйте,

 a = str( datetime.now() ) 

См. Раздел Расширение кодировщика из документации json package https://docs.python.org/2/library/json.html

Я использовал этот метод и нашел его достаточно эффективным. Я думаю, что это то, что вы ищете.

 import json class DatetimeEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, datetime): return obj.strftime('%Y-%m-%dT%H:%M:%SZ') elif isinstance(obj, date): return obj.strftime('%Y-%m-%d') # Let the base class default method raise the TypeError return json.JSONEncoder.default(self, obj) json.dumps(dict,cls=DatetimeEncoder) 

Вы можете добавить кодер времени даты в функцию JSON jumps при обработке запросов модели, это немного изменилось, поскольку у меня были проблемы с состоянием модели базового django

 import datetime import decimal from django.db.models.base import ModelState class DateTimeEncoder(json.JSONEncoder): def default(self, obj): if hasattr(obj, 'isoformat'): return obj.isoformat() elif isinstance(obj, decimal.Decimal): return float(obj) elif isinstance(obj, ModelState): return None else: return json.JSONEncoder.default(self, obj) 

Затем используйте этот класс с вашими свалками json

 b = json.dumps(a, cls = DateTimeEncoder) 

Я нашел это неоценимым, особенно после обновления Django с 1,7 до 1,9. Большая часть этого из блога http://arthurpemberton.com/2015/04/fixing-uuid-is-not-json-serializable Поместите это в models.py прямо под импортом. Он также позаботится о UUID.

 from uuid import UUID import datetime JSONEncoder_olddefault = JSONEncoder.default def JSONEncoder_newdefault(self, o): if isinstance(o, UUID): return str(o) if isinstance(o, datetime.datetime): return str(o) return JSONEncoder_olddefault(self, o) JSONEncoder.default = JSONEncoder_newdefault 
  • Редактирование объекта сериализатора django-rest-framework перед сохранением
  • Быстрая сериализация JSON (и сравнение с Pickle) для кластерных вычислений в Python?
  • Django Сериализация объектов DateTime в словаре
  • Динамически исключать или включать поле в сериализатор рамки Django REST
  • Недопустимая ошибка «поля должна быть уникальной» в структуре Django REST
  • AttributeError при использовании Django Rest Framework с сериализаторами
  • Ошибки сериализатора djangorestframework: {u'non_field_errors ': ]}
  • Как сериализовать иерархические отношения в Django REST
  •  
    Interesting Posts for Van-Lav

    datetime и timezone с pytz-mind blowing behavior

    Скремблирование таблицы с помощью BeautifulSoup

    Python 3 Ошибка памяти Zipfile. ожидаемый аргумент строки, полученный 'bytes'

    Как я могу обрабатывать версии версий пакетов Python, не полагаясь на SCM?

    Как элегантно проверить существование объекта / экземпляра / переменной и одновременно назначить его переменной, если она существует в python?

    Почему привязка к моим глобальным переменным не работает в Python?

    Python и 'print ssl.OPENSSL_VERSION' печатает неправильную версию

    Изменение размера изображения на Python без потери данных EXIF

    Python: определить, содержится ли несортированный список в «списке списков», независимо от порядка элементов

    Производительность создания нового DataFrame

    PyCharm. Получение Dir Project в окне «Run / Debug Configuration»

    Сделать монохромный массив без контура Python

    Неверное среднее значение numpy?

    Есть ли эквивалент функции диапазона Python в MATLAB?

    Как добавить новые данные в существующий XML с помощью Python ElementTree?

    Python - лучший язык программирования в мире.