Отправка NaN в json
Я пытаюсь закодировать массив, содержащий float и NaN
, в строку JSON из Python с помощью json.dumps()
.
Но закодированная строка JSON не успешно декодируется в PHP. Является ли NaN
причиной этой проблемы? Как я могу обойти эту ситуацию?
Ответы
Ответ 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