Подтвердить что ты не робот

Отправка NaN в json

Я пытаюсь закодировать массив, содержащий float и NaN, в строку JSON из Python с помощью json.dumps().

Но закодированная строка JSON не успешно декодируется в PHP. Является ли NaN причиной этой проблемы? Как я могу обойти эту ситуацию?

4b9b3361

Ответ 1

json.dumps имеет параметр allow_nan, который по умолчанию имеет значение True.

NaN, Infinity и -Infinity не являются частью JSON, но они являются стандартными в Javascript, поэтому они обычно используются расширениями. Если получатель не может их обработать, установите allow_nan=False. Но тогда вы получите ValueError при попытке сериализации NaN.

Ответ 2

NaN не является допустимым символом JSON, см. спецификацию в http://json.org/

Возможно, ваш кодер должен был закодировать NaN как null.

Ответ 3

Пакет simplejson, на котором основан стандартный пакет json Python, перемещается быстрее и обрабатывает эту ситуацию. NaN не является действительным JSON, а ignore_nan флаг будет обрабатывать правильно все NaN к null преобразования.

import simplejson as json
json.dumps(thing, ignore_nan=True)

Параметр по default позволит simplejson правильно анализировать ваши даты.

json.dumps(response, ignore_nan=True, default=datetime.datetime.isoformat)

simplejson может быть установлен с помощью pip.

pip install simplejson