Używam standardowego modułu json w Pythonie 2.6 do serializacji listy pływaków. Jednak otrzymuję takie wyniki:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Chcę, aby liczby zmiennoprzecinkowe były sformatowane za pomocą tylko dwóch cyfr dziesiętnych. Wynik powinien wyglądać następująco:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Próbowałem zdefiniować własną klasę JSON Encoder:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Działa to dla jedynego obiektu pływającego:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Ale niepowodzenie w przypadku obiektów zagnieżdżonych:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Nie chcę mieć zewnętrznych zależności, więc wolę trzymać się standardowego modułu json.
Jak mogę to osiągnąć?