Estou usando o módulo json padrão em python 2.6 para serializar uma lista de flutuadores. No entanto, estou obtendo resultados como este:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Eu quero que os flutuadores sejam formatados com apenas dois dígitos decimais. A saída deve ser semelhante a esta:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Tentei definir minha própria classe de codificador JSON:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Isso funciona para um único objeto flutuante:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Mas falha para objetos aninhados:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Não quero ter dependências externas, então prefiro ficar com o módulo json padrão.
Como posso conseguir isso?