Ich verwende das Standard- JSON-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 Gleitkommazahlen nur aus zwei Dezimalstellen bestehen. 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 einziges Float-Objekt:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Aber schlägt für verschachtelte Objekte fehl:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Ich möchte keine externen Abhängigkeiten haben, deshalb bleibe ich lieber beim Standard-JSON-Modul.
Wie kann ich das erreichen?