Я использую стандартный модуль json в python 2.6 для сериализации списка чисел с плавающей запятой. Однако я получаю такие результаты:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Я хочу, чтобы числа с плавающей запятой состояли только из двух десятичных цифр. Результат должен выглядеть так:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Я попытался определить свой собственный класс JSON Encoder:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Это работает для единственного плавающего объекта:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Но не работает для вложенных объектов:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Я не хочу иметь внешние зависимости, поэтому предпочитаю использовать стандартный модуль json.
Как я могу этого добиться?