Formatar carros alegóricos com o módulo json padrão

Estou usando o padrãomódulo json no python 2.6 para serializar uma lista de floats. No entanto, estou obtendo resultados assim:

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

Eu quero que os floats sejam formatados com apenas dois dígitos decimais. A saída deve ficar assim:

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

Eu tentei definir minha própria 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)

Isso funciona para um único objeto float:

>>> 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]'

Eu não quero ter dependências externas, então eu prefiro ficar com o módulo json padrão.

Como posso conseguir isso?

questionAnswers(12)

yourAnswerToTheQuestion