lemar_30
@lemar_30

Как правильно раскрыть сложный json на python?

Работаю с API ВКонтакте. Пишу на Python. На мой запрос пришел json ответ. Я не могу его никак распАковать. Пробовал через вложенные циклы for, через генераторы списков - нормально
никак не получается. Дело в том, что в json ответе приходят группы данных - т.е. набор данных для каждого объекта. К примеру, человек, его контактные данные и некоторая информация. Мне надо
раскрыть json так, чтобы в конце я получил группы списков этих контактов, например:
['id_1', 'telefon_1', 'e-mail_1']
['id_2', 'telefon_2', 'e-mail_2']
['id_3', 'telefon_3', 'e-mail_3']
и.т.д

Но у меня пока получается только всё скопом получать:
['id_1', 'telefon_1', 'e-mail_1','id_2', 'telefon_2', 'e-mail_2','id_3', 'telefon_3', 'e-mail_3']

Что делает невозможным разделять этих людей и обрабатывать данные конкретных людей.

Вот сам json:

[{'lead_id': '756644', 'user_id': '1015455', 'date': '159565554', 'answers': 
	[{'key': 'first_name', 'answer':
		{'value': 
			'Alex'}}, 
	{'key': 'email', 'answer':
		{'value':
			'534534534@mail.ru'}}, 
	{'key': 'phone_number', 'answer':
		{'value':
			'+79864567253'}}]}, 
{'lead_id': '756664', 'user_id': '1016766', 'date': '1595643427', 'answers': 
	[{'key': 'first_name', 'answer':
		{'value': 
			'Al'}}, 
	{'key': 'email', 'answer': 
		{'value': 
			'p67673@mail.ru'}}, 
	{'key': 'phone_number', 'answer': 
		{'value': 
			'+7 (999) 3965533'}}]}]

Тут две группы данных. Дальше их может быть больше.
Как мне его распоковать, чтобы отдельно группированно получить данные по каждому человеку?
  • Вопрос задан
  • 1965 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Лучше использовать словари, конечно

data = [{'lead_id': '756644', 'user_id': '1015455', 'date': '159565554', 'answers': 
  [{'key': 'first_name', 'answer':
    {'value': 
      'Alex'}}, 
  {'key': 'email', 'answer':
    {'value':
      '534534534@mail.ru'}}, 
  {'key': 'phone_number', 'answer':
    {'value':
      '+79864567253'}}]}, 
{'lead_id': '756664', 'user_id': '1016766', 'date': '1595643427', 'answers': 
  [{'key': 'first_name', 'answer':
    {'value': 
      'Al'}}, 
  {'key': 'email', 'answer': 
    {'value': 
      'p67673@mail.ru'}}, 
  {'key': 'phone_number', 'answer': 
    {'value': 
      '+7 (999) 3965533'}}]}]

all_info = []

for member in data:
    member_info = []
    member_info.append(member['lead_id'])
    
    answers = member['answers']
    for answer in answers:
        answer_key = answer.get('key', None)
        
        if answer_key == 'phone_number':
            member_info.insert(1, answer['answer']['value'])
        
        elif answer_key == 'email':
            member_info.insert(2, answer['answer']['value'])

    all_info.append(member_info)


print(all_info)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 200 000 ₽
Гринатом Москва
от 150 000 ₽
DIGITAL SECTOR Краснодар
от 150 000 до 250 000 ₽