Как получить определенное значение в массиве объектов json и сохранить в переменной

#python #json

#python #json

Вопрос:

У меня есть код, который выбирает некоторые данные из моей базы данных.

Он возвращает список:

 selects = [(2, '4'), (2, '17'), (3, '65'), (1, '54'), (2, '14'),...]
  

Я хочу преобразовать этот список в объект JSON, поэтому я делаю:

 selects = json.dumps(selects)
  

Предоставление мне значения, подобного этому:

 [[2, "4"], [2, "17"], [3, "65"], [1, "54"], [2, "14"], ...]
  

После этого я хочу написать for цикл для получения каждого объекта словаря и сохранения в переменной. Например:

 [[2, "4"]]
var1 = 2
var2 = "4"
  

Но у меня проблема с извлечением нужного значения. Когда я пытаюсь var = json[0] , он возвращает только [ .

Моя идея состоит в том, чтобы сделать for для запуска thought все объекты в json, сохранить их в var и отправить другому процессу…

Что я должен сделать, чтобы сохранить значения, подобные приведенному выше примеру?

Вот код, который я использую:

 import json

class Pull():
    def process(self, **kwargs):
        data     = kwargs.get('data')
        client   = kwargs.get('client')
        postgres = kwargs.get('postgres')

        selects = postgres.select(data_type='session')
        selects = json.dumps(selects)

        for select in selects:
            var1 = select[0]
            var2 = select[1]
            sessions = client.get_sessions(city=var1, cinema=var2)
  

Ответ №1:

Частично путаница здесь связана с терминологией, а частично — с ненужным уровнем сложности. Оба могут быть решены.

Имеющийся у вас объект JSON не является словарем. Это строка, содержащая сериализованное представление вложенного списка. Как и следовало ожидать от строки, select[0] является первым символом строки, select[1] вторым и т.д.

При сериализации, будь то в формате JSON или другом формате, вы получаете что-то, что можно отправить или записать. Данные JSON не предназначены для использования в качестве данных. У вас есть исходная, несериализованная форма для работы, если вам нужен фактический список:

 selects = postgres.select(data_type='session')

for select in selects:
    var1 = select[0]
    var2 = select[1]
    sessions = client.get_sessions(city=var1, cinema=var2)
  

Комментарии:

1. Спасибо за помощь и объяснение. Поскольку я новичок в такого рода задачах, это действительно помогает мне терпеливо решать проблему.

2. @a223w2d. Рад, что у вас все получилось. У всех возникают проблемы при запуске. Просто продолжайте подключаться, пока не получите git gud.

Ответ №2:

Это 3-й раз за 2 дня, который json.dumps используется без видимой причины…. selects это уже список / словарь, нет необходимости передавать его в json.dumps который возвращает строку (следовательно select[0] , первый символ не возвращается).

Удалите строку selects = json.dumps(selects)

Ответ №3:

selects = json.dumps(selects) является строкой. Выполнение selects[0] выдает первый символ.

Вы не хотите сериализовывать свои данные в JSON для их обработки. Сохраняйте ваши данные такими, какие они есть на самом деле, и обрабатывайте их как список python.