Как изменить энкодер Python JSON, чтобы преобразовать NAN.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как изменить энкодер Python JSON, чтобы преобразовать NAN.

Сообщение Anonymous »

Скажем, у меня есть это (все это Python 3.11, если это имеет значение): < /p>

Код: Выделить всё

not_a_number = float("NaN")  # this actually comes from somewhere else
json.encode([not_a_number])
Вывод - это (недействительный) json literal nan . Я пытался создать подкласс jsonencoder, который использовал бы math.isnan () , чтобы определить, является ли значение NAN и выводом нет . Затем я нашел рекомендацию для переопределения метода encode () , поэтому я попробовал это:

Код: Выделить всё

class NanEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
if math.isnan(obj):
return None
return super(NanEncoder, self).encode(obj)
< /code>
Это работает: < /p>
>>> json.dumps(not_a_number, cls=NanEncoder)
>>> json_string = json.dumps(not_a_number, cls=NanEncoder)
>>> print(json_string)
None
< /code>
круто, я думаю, у меня есть. Но это не работает: < /p>
not_a_number_list = [not_a_number]
print(not_a_number_list)
[nan]
json_string = json.dumps(not_a_number_list, cls=NanEncoder)
print(json_string)
[NaN]
< /code>
Итак, как я вижу в документах Python, может быть, мне нужно вызвать метод Encode немного по -другому, поэтому я попробую: < /p>
json_string = NanEncoder().encode(not_a_number_list)
print(json_string)
[NaN]
Увы, нет разницы. Или я отменен для поиска/замены на строке NAN с null в выводе JSON (который, теоретически, в любом случае, может изменить данные, которые я не хочу)? Исправление входного словаря не является отличным вариантом, потому что дикта, в котором находятся значения, довольно большой, и его конструкция не находится под моим контролем (поэтому я не могу остановить NAN от попадания туда в первую очередь).

Подробнее здесь: https://stackoverflow.com/questions/779 ... an-to-none
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»