Estoy usando el módulo json estándar en python 2.6 para serializar una lista de flotantes. Sin embargo, obtengo resultados como este:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Quiero que los flotantes estén formateados con solo dos dígitos decimales. La salida debería verse así:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
He intentado definir mi propia clase 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)
Esto funciona para un único objeto flotante:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Pero falla para los objetos anidados:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
No quiero tener dependencias externas, por lo que prefiero seguir con el módulo json estándar.
¿Cómo puedo conseguir esto?