JSON-дамп нечисловых чисел с помощью модуля Python's ujson
Я пытаюсь сериализовать номера с помощью ujson
модуль в Python3. Некоторые значения NaN
s.
При использовании стандарта json
модуль, все отлично работает.
import json
json.dumps(float('NaN'))
дает:
'NaN'
Но есть проблема с ujson
,
import ujson
ujson.dumps(float('NaN'))
выдает исключение:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: Invalid Nan value when encoding double
я использую ujson
по причинам производительности. Должен ли я заменить все вхождения NaN
в моих структурах со строкой 'NaN'
или есть способ сказать ujson
обрабатывать NaN
без исключения?
У меня также есть те же самые проблемы с бесконечностями. Я не смог найти никаких соответствующих документов.
1 ответ
Согласно RFC4627, который определяет формат JSON, в разделе 2.4 о числах:
Числовые значения, которые не могут быть представлены в виде последовательности цифр (например, Infinity и NaN), не допускаются.
Так ujson
более соответствует стандарту JSON, чем json
модуль в стандартной библиотеке. По мне этот результат излишне педантичный, но выбор ujson
должен соответствовать этому стандарту. Вы можете прочитать больше об этом здесь.
Кажется, что единственный способ - это преобразовать данные до (или отправить запрос на ujson
чтобы включить его).