Python Добавляет UUID в список, который будет добавлен в объект JSON/Dict

#json #python-3.x #list #dictionary

Вопрос:

До сих пор у меня есть следующий код:

 for endpoint in endpoints:  post_aga = APINSRRequestsRouter()  response_obj_aga = post_aga.send_aga_post_request(endpoint)   if response_obj_aga:  if response_obj_aga[0] == "201":  id = response_obj_aga[1]["ACK"]["id"]   #dictionary with list code here   

response_obj_aga-это объект списка, содержащий строку и объект json, как показано на примере:

 ['200', {'ACK': {'message': 'something happened', 'id': '319711da-20fd-4c94-bf8b-04735b435dd1'}}]  

Что я хочу сделать, так это каждый раз, когда я получаю объект response_obj_aga, содержащий идентификатор, я хочу добавить этот идентификатор в список в словаре, чтобы я мог сохранить его как объект JSON в своей базе данных. Итак, допустим, я ожидаю 3 отдельных ответа и имею следующие данные:

 ['200', {'ACK': {'message': 'something happened', 'id': '17d362ae-a796-40fd-a1c3-0ff64e6f62e0'}}]  ['200', {'ACK': {'message': 'something happened', 'id': '54e63ab8-aa1b-4d6f-a570-6ee7e52e2318'}}]  ['200', {'ACK': {'message': 'something happened', 'id': 'b0a8ad20-b3e6-4100-963e-0f5e7f7e51f5'}}]   

То, что я хочу получить в конце своего цикла, было бы примерно так:

 {  "ids": [  "17d362ae-a796-40fd-a1c3-0ff64e6f62e0",  "54e63ab8-aa1b-4d6f-a570-6ee7e52e2318",  "b0a8ad20-b3e6-4100-963e-0f5e7f7e51f5"  ] }  

Каков был бы наиболее эффективный способ сделать это?

Ответ №1:

Создайте объект шаблона и добавьте к нему идентификаторы по мере чтения ответов.

Рабочий пример:

 import json  responses = [['200', {'ACK': {'message': 'something happened', 'id': '17d362ae-a796-40fd-a1c3-0ff64e6f62e0'}}],  ['200', {'ACK': {'message': 'something happened', 'id': '54e63ab8-aa1b-4d6f-a570-6ee7e52e2318'}}],  ['200', {'ACK': {'message': 'something happened', 'id': 'b0a8ad20-b3e6-4100-963e-0f5e7f7e51f5'}}]]  result = {'ids':[]}  for response in responses:  result['ids'].append(response[1]['ACK']['id'])  print(json.dumps(result, indent=2))  

Выход:

 {  "ids": [  "17d362ae-a796-40fd-a1c3-0ff64e6f62e0",  "54e63ab8-aa1b-4d6f-a570-6ee7e52e2318",  "b0a8ad20-b3e6-4100-963e-0f5e7f7e51f5"  ] }  

Как должен выглядеть ваш код:

 result = {'ids':[]}  for endpoint in endpoints:  post_aga = APINSRRequestsRouter()  response_obj_aga = post_aga.send_aga_post_request(endpoint)   if response_obj_aga:  if response_obj_aga[0] == "201":  id_ = response_obj_aga[1]["ACK"]["id"]   result['ids'].append(id_)  

Примечание: id является встроенной функцией в Python и не должна использоваться для имени переменной.