Formatieren Sie Floats mit dem Standard-JSON-Modul

Ich benutze den Standardjson modul in Python 2.6, um eine Liste von Floats zu serialisieren. Ich erhalte jedoch folgende Ergebnisse:

>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'

Ich möchte, dass die Floats nur mit zwei Dezimalstellen formatiert werden. Die Ausgabe sollte folgendermaßen aussehen:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'

Ich habe versucht, meine eigene JSON-Encoder-Klasse zu definieren:

class MyEncoder(json.JSONEncoder):
    def encode(self, obj):
        if isinstance(obj, float):
            return format(obj, '.2f')
        return json.JSONEncoder.encode(self, obj)

Dies funktioniert für ein einzelnes Float-Objekt:

>>> json.dumps(23.67, cls=MyEncoder)
'23.67'

Scheitert aber bei verschachtelten Objekten:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'

Ich möchte keine externen Abhängigkeiten haben, daher halte ich mich lieber an das Standard-JSON-Modul.

Wie kann ich das erreichen?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage