使用 Flask 的 jsonify 时,将 datetime.date 保留为 'yyyy-mm-dd' 格式 [英] Keep a datetime.date in 'yyyy-mm-dd' format when using Flask's jsonify
本文介绍了使用 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.
推荐答案
Following 这个片段你可以这样做:
Following this snippet you can do this:
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屋!
查看全文