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}'