使用Flask的jsonify时,将datetime.date保留为'yyyy-mm-dd'格式 [英] Keep a datetime.date in 'yyyy-mm-dd' format when using Flask's jsonify

查看:709
本文介绍了使用Flask的jsonify时,将datetime.date保留为'yyyy-mm-dd'格式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于某些原因,jsonify函数将我的datetime.date转换为看起来像HTTP日期的日期.使用jsonify时如何将日期保持为yyyy-mm-dd格式?

For some reason, the jsonify function is converting my datetime.date to what appears to be an HTTP date. How can I keep the date in yyyy-mm-dd format when using jsonify?

test_date = datetime.date(2017, 4, 27)
print(test_date)  # 2017-04-27
test_date_jsonify = jsonify(test_date)
print(test_date_jsonify.get_data(as_text=True))  # Thu, 27 Apr 2017 00:00:00 GMT

如注释中所建议,使用jsonify(str(test_date))返回所需的格式.但是,请考虑以下情况:

As suggested in the comments, using jsonify(str(test_date)) returns the desired format. However, consider the following case:

test_dict = {"name": "name1", "date":datetime.date(2017, 4, 27)}
print(test_dict) # {"name": "name1", "date":datetime.date(2017, 4, 27)}

test_dict_jsonify = jsonify(test_dict)
print(test_dict_jsonify.get_data(as_text=True)) # {"date": "Thu, 27 Apr 2017 00:00:00 GMT", "name": "name1"}

test_dict_jsonify = jsonify(str(test_dict))
print(test_dict_jsonify.get_data(as_text=True)) # "{"date": datetime.date(2017, 4, 27), "name": "name1"}"

在这种情况下,str()解决方案不起作用.

In this case, the str() solution does not work.

推荐答案

遵循此代码段您可以这样做:

from flask.json import JSONEncoder
from datetime import date


class CustomJSONEncoder(JSONEncoder):

    def default(self, obj):
        try:
            if isinstance(obj, date):
                return obj.isoformat()
            iterable = iter(obj)
        except TypeError:
            pass
        else:
            return list(iterable)
        return JSONEncoder.default(self, obj)

app = Flask(__name__)
app.json_encoder = CustomJSONEncoder

路线:

import datetime as dt

@app.route('/', methods=['GET'])
def index():
    now = dt.datetime.now()
    return jsonify({'now': now})

这篇关于使用Flask的jsonify时,将datetime.date保留为'yyyy-mm-dd'格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆