From 2225d0e899a16870f7da2673988929cf87d9aa41 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 28 Jun 2022 10:07:40 -0500 Subject: [PATCH] Enable serialization of float subclasses with orjson (#74136) --- homeassistant/helpers/json.py | 2 ++ tests/helpers/test_json.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/homeassistant/helpers/json.py b/homeassistant/helpers/json.py index dbe3163da08..8b91f5eb2b5 100644 --- a/homeassistant/helpers/json.py +++ b/homeassistant/helpers/json.py @@ -35,6 +35,8 @@ def json_encoder_default(obj: Any) -> Any: """ if isinstance(obj, set): return list(obj) + if isinstance(obj, float): + return float(obj) if hasattr(obj, "as_dict"): return obj.as_dict() if isinstance(obj, Path): diff --git a/tests/helpers/test_json.py b/tests/helpers/test_json.py index 17066b682af..cfb403ca4a9 100644 --- a/tests/helpers/test_json.py +++ b/tests/helpers/test_json.py @@ -8,6 +8,7 @@ from homeassistant import core from homeassistant.helpers.json import ( ExtendedJSONEncoder, JSONEncoder, + json_dumps, json_dumps_sorted, ) from homeassistant.util import dt as dt_util @@ -77,3 +78,12 @@ def test_json_dumps_sorted(): assert json_dumps_sorted(data) == json.dumps( data, sort_keys=True, separators=(",", ":") ) + + +def test_json_dumps_float_subclass(): + """Test the json dumps a float subclass.""" + + class FloatSubclass(float): + """A float subclass.""" + + assert json_dumps({"c": FloatSubclass(1.2)}) == '{"c":1.2}'