Sto usando il modulo json standard in python 2.6 per serializzare un elenco di float. Tuttavia, ottengo risultati come questo:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Voglio che i float siano formattati con solo due cifre decimali. L'output dovrebbe essere simile a questo:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Ho provato a definire la mia classe JSON Encoder:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Funziona per un unico oggetto float:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Ma fallisce per gli oggetti annidati:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Non voglio avere dipendenze esterne, quindi preferisco restare con il modulo json standard.
Come posso raggiungere questo obiettivo?