JSON изхвърля нечислови плаващи числа с модула ujson на Python

Опитвам се да сериализирам числа с помощта на модул 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 да обработва NaNs, без да хвърля изключение?

Аз също имам същите проблеми с безкрайностите. Не успях да намеря подходящи документи.


person Tregoreg    schedule 15.08.2014    source източник
comment
Вижте напр. github.com/esnme/ultrajson/issues/80; това всъщност е по-последователно със спецификацията JSON.   -  person jonrsharpe    schedule 16.08.2014


Отговори (1)


Според RFC4627, който дефинира формата JSON, в раздел 2.4 относно числа:

Числови стойности, които не могат да бъдат представени като поредица от цифри (като Infinity и NaN), не са разрешени.

Така че ujson е по-съвместим със стандарта JSON, отколкото модула json в стандартната библиотека. Според мен този резултат е ненужно педантичен, но изборът на ujson е да отговаря на този стандарт. Можете да прочетете повече за това тук.

Изглежда, че единственият начин е да конвертирате данните преди (или да изпратите заявка за изтегляне до ujson, за да го активирате).

person enrico.bacis    schedule 15.08.2014