отправка NaN в JSON - PullRequest
       7

отправка NaN в JSON

48 голосов
/ 06 июля 2011

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

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

Ответы [ 3 ]

38 голосов
/ 07 июля 2011

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

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

15 голосов
/ 06 июля 2011

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

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

13 голосов
/ 10 августа 2016

Пакет simplejson, на котором основан стандартный пакет Python json, перемещается быстрее и обрабатывает эту ситуацию. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...