JSON-дамп нечисловых чисел с помощью модуля Python's ujson

Я пытаюсь сериализовать номера с помощью ujson модуль в Python3. Некоторые значения NaNs.

При использовании стандарта 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 чтобы включить его).

Другие вопросы по тегам