From b4104b9833227984a6cf732968433f9c1ed611cd Mon Sep 17 00:00:00 2001 From: acidvegas Date: Sun, 15 Dec 2024 00:10:50 -0500 Subject: [PATCH] Fixed NaN error --- src/meshtastic_mqtt_json/client.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/meshtastic_mqtt_json/client.py b/src/meshtastic_mqtt_json/client.py index 7e07e24..613213e 100644 --- a/src/meshtastic_mqtt_json/client.py +++ b/src/meshtastic_mqtt_json/client.py @@ -167,19 +167,27 @@ class MeshtasticMQTT(object): if self.filters and portnum_name not in self.filters: return - # Convert to JSON with parsing options to handle NaN + # Convert to JSON and handle NaN values in one shot json_packet = json.loads(MessageToJson(mp, including_default_value_fields=True, preserving_proto_field_name=True, float_precision=10)) - # Replace NaN values with null in the JSON structure + # Replace all NaN values with null before any further processing def replace_nan(obj): + ''' + Replace all NaN values with null before any further processing + + :param obj: The object to replace NaN values in + ''' if isinstance(obj, dict): return {k: replace_nan(v) for k, v in obj.items()} elif isinstance(obj, list): return [replace_nan(x) for x in obj] - elif isinstance(obj, str) and obj == 'NaN': + elif isinstance(obj, float) and str(obj).lower() == 'nan': return None + elif isinstance(obj, str) and obj.lower() == 'nan': + return None + return obj json_packet = replace_nan(json_packet)