Keep a datetime.date in ‘yyyy-mm-dd’ format when using Flask’s jsonify

edit: this answer is now too old for Flask versions 2.3+.

for those newer versions, instead customize json_provider_class; reference: https://flask.palletsprojects.com/en/2.2.x/api/?highlight=json_encoder#flask.Flask.json_provider_class


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

Route:

import datetime as dt

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

Leave a Comment