使用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.
推荐答案
遵循此代码段您可以这样做:
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屋!
查看全文