Колба datetime.date не поддерживает сериализацию в формате JSON - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь вернуть возвращаемый список словарей как часть запроса get. Я вызываю функцию ниже.

def get_data(id):
  selected_data = Database.get_date(id)
  json.dumps(selected_data, default=str)
  return jsonify({'data': selected_data})

selected_data похожа на

[{'date': datetime.date(2019, 1, 15), 'id': 1, 'name': 'John '}, {'date': datetime.date(2019, 1, 11), 'id': 2, 'name': 'Jane'}]

Но я получаю сообщение об ошибке ниже

TypeError (repr (o) + "не сериализуемо в JSON") Ошибка типа: datetime.date (2019, 1, 15) не поддерживает сериализацию в формате JSON

Я пытался использовать json.dumps, например , это переполнение стека поток предлагает, но все равно получает ту же ошибку.

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Попробуйте одно из следующих действий:

selected_data["date"] = selected_data["date"].isoformat()
selected_data["date"] = selected_data["date"].strftime("%Y-%m-%d %H:%M:%S:%f")
selected_data["date"] = str(selected_data["date"])
0 голосов
/ 08 марта 2019

Вы должны понять, клиент JSONEncoder

import json
from datetime import date
from datetime import datetime
class JsonExtendEncoder(json.JSONEncoder):
    """
        This class provide an extension to json serialization for datetime/date.
    """
    def default(self, o):
        """
            provide a interface for datetime/date
        """
        if isinstance(o, datetime):
            return o.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(o, date):
            return o.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self, o)
if __name__ == '__main__':
    d = {'now': datetime.now(), 'today': date.today(), 'i': 100}
    ds = json.dumps(d, cls=JsonExtendEncoder)
    print "ds type:", type(ds), "ds:", ds
    l = json.loads(ds)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...