Десериализовать массив JSON непосредственно в набор в Python

1

Есть ли способ десериализации массива json непосредственно в набор?

data.json (да, это просто массив json).

["a","b","c"]

Обратите внимание: массив json содержит уникальные элементы.

В настоящее время мой рабочий процесс следующий.

open_file = open(path, 'r') 
json_load = json.load(open_file) # this returns a list
return set(json_load) # which I am then converting to a set. 

Есть ли способ сделать что-то подобное?

open_file = open(path, 'r') 
return json.load(open_file, **arguments) # this returns a set.

Также есть ли другой способ сделать это без модуля json? Конечно, я не первый, кому нужен набор декодеров.

  • 2
    «Эта операция требует дополнительного времени и памяти». Да, но время и пространство равны O (N) по отношению к размеру данных, так стоит ли беспокоиться? Вы провели сравнительный анализ, чтобы эмпирически определить, что это узкое место в производительности?
  • 0
    Я не думаю, что есть, потому что json обычно это не просто массив
Показать ещё 3 комментария
Теги:
python-3.x

1 ответ

2

Нет. Вы должны подклассифицировать один из классов JSONDecoder модуля JSONDecoder и переопределить метод, который создает объект, сделать это самостоятельно.

И это тоже не стоит того. json массивы действительно сопоставляются с списками в python - они имеют порядок и могут разрешать дубликаты - набор не может правильно представлять массив json. Поэтому задача json-декодера заключается не в предоставлении набора.

Преобразование - это лучшее, что вы можете сделать. Вы можете создать функцию и вызвать ее, когда вам нужно:

def json_load_set(f):
    return set(json.load(f))
  • 0
    Также есть ли другой способ сделать это без модуля JSON, возможно? Конечно, я не первый, кому нужен набор декодера.
  • 0
    @ Крис, ты упускаешь суть. Вы можете сделать это самостоятельно, но это того не стоит! Модуль json отлично справляется с массивами json и правильно возвращает список - все, что вам нужно сделать, - это преобразовать в набор. Написание парсера самостоятельно склонно к ошибкам и большему количеству кода, без реальной выгоды

Ещё вопросы

Сообщество Overcoder
Наверх
Меню