diff --git a/CHANGES.rst b/CHANGES.rst index 72754ad6..7b6a96cd 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,7 +6,7 @@ Version 2.1.0 Unreleased - Update Click dependency to >= 8.0. - +- Added support for Decimal objects in JSONEncoder Version 2.0.2 ------------- diff --git a/src/flask/json/__init__.py b/src/flask/json/__init__.py index 5780e204..edcbd95d 100644 --- a/src/flask/json/__init__.py +++ b/src/flask/json/__init__.py @@ -1,3 +1,4 @@ +import decimal import io import json as _json import typing as t @@ -45,6 +46,8 @@ class JSONEncoder(_json.JSONEncoder): overriding how basic types like ``str`` or ``list`` are serialized, they are handled before this method. """ + if isinstance(o, decimal.Decimal): + return str(o) if isinstance(o, date): return http_date(o) if isinstance(o, uuid.UUID): diff --git a/tests/test_json.py b/tests/test_json.py index fb8bdcba..fd758dc2 100644 --- a/tests/test_json.py +++ b/tests/test_json.py @@ -1,4 +1,5 @@ import datetime +import decimal import io import uuid @@ -9,6 +10,11 @@ import flask from flask import json +def test_json_encode_decimal(): + decimal_ = decimal.Decimal(100) + assert flask.json.JSONEncoder().default(decimal_) == str(decimal_) + + @pytest.mark.parametrize("debug", (True, False)) def test_bad_request_debug_message(app, client, debug): app.config["DEBUG"] = debug