Ошибка TypeError при рендеринге: Decimal ('51 .8 ') не поддерживает сериализацию в формате JSON - PullRequest
2 голосов
/ 28 декабря 2011

Я использую Python 2.6.5 и Django 1.3. При запуске приведенного ниже кода я получаю вышеуказанную ошибку

if chart_list is not None:
    if isinstance(chart_list, (Chart, PivotChart)):
        chart_list = [chart_list]
    chart_list = [c.hcoptions for c in chart_list]
    render_to_list = [s.strip() for s in render_to.split(',')]
    for hco, render_to in izip_longest(chart_list, render_to_list):
        if render_to:
            hco['chart']['renderTo'] = render_to
    embed_script = (embed_script % (simplejson.dumps(chart_list,skipkeys=False,   ensure_ascii=True, 
  check_circular=True, allow_nan=True, cls=None),
                                    CHART_LOADER_URL))
else:
    embed_script = embed_script %((), CHART_LOADER_URL)
return mark_safe(embed_script

Ответы [ 2 ]

8 голосов
/ 28 декабря 2011

Использование пользовательского JSONEncoder должно помочь

class DecimalEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        super(DecimalEncoder, self).default(o)

# and then:
json.dumps(chart_list,..., cls=DecimalEncoder)

Обновлено

Обновлено в соответствии с комментариями Даниэля (более СУХОЙ способ)

from django.core.serializers.json import DjangoJSONEncoder
json.dumps(chart_list,..., cls=DjangoJSONEncoder)
0 голосов
/ 28 декабря 2011

Простое и быстрое решение: преобразовать этот десятичный объект в строку перед передачей в dumps метод

decimal_value = Decimal('51.8')
simplejson.dumps(str(decimal_value))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...