Format de flotteurs avec la norme module json

Je suis en utilisant le standard module json en python 2.6 pour sérialiser une liste de chars. Cependant, je suis à l'obtention de résultats comme ceci:

>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'

Je veux la flotte à être formaté avec seulement deux chiffres après la virgule. La sortie devrait ressembler à ceci:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'

J'ai essayé de définir ma propre JSON Codeur classe:

class MyEncoder(json.JSONEncoder):
    def encode(self, obj):
        if isinstance(obj, float):
            return format(obj, '.2f')
        return json.JSONEncoder.encode(self, obj)

Cela fonctionne pour un seul objet float:

>>> json.dumps(23.67, cls=MyEncoder)
'23.67'

Mais ne parvient pas pour les objets imbriqués:

>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'

Je ne veux pas avoir de dépendances externes, donc je préfère m'en tenir à la norme json module.

Comment puis-je y parvenir?

OriginalL'auteur Manuel Ceron | 2009-09-19