Я пытаюсь закодировать массив, содержащий 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 правильно анализировать ваши даты.