от
Я новичок в программировании. Я использую Python 3.7.3. В моем рабочем процессе я получаю данные JSON из первого REST API, который мне нужно проанализировать, чтобы передать второй REST API. Мои данные в формате JSON кажутся диктом, содержащим один список ["case"], содержащий 10000 диктов, каждая из которых содержит 4 (k, v) пары, из которых мне нужно извлечь список значений ключей ['caseId']. Мой JSON выглядит так:
{"cases": [
{"databaseId": "csc

Мне нужны значения caseId для подачи в функцию, которая будет создавать мои запросы GET для второго API (api_url = '{0} / {1}'. Format (api_base_url, caseId)).

После проб и ошибок я создал цикл while. Это работает при использовании print (), что не помогает, потому что мне нужны итерируемые данные, которые я могу вызвать позже. Я попытался добавить данные в список следующим образом:

import requests
import json
api_base_url = "https://myapi.org/api"
api_key = "1234"

def get_case_info():
    paramsCB = {'resultCount':'10000', 'api_key':api_key}
    respCB = requests.get(url = api_base_url, params = paramsCB)
    if respCB.status_code == 200:
        return respCB.json()
    else:
        return None

def parse_caseID_info():
    respCB_json = respCB.json()
    with open('respCB.json', 'w') as f:
        json.dump(respCB_json, f)              
    with open ('respCB.json', 'r') as f:
        respCB_dict = json.load(f)

    caseIDlist = []
    i = 0                                               
    while i < len(respCB_dict['cases']):                                                            
        caseIDlist.append(respCB_dict['cases'][i]['caseId'])  
        i  = 1
Когда я заменяю print () на caseIDlist.append () и запускаю его (заменив в моем тесте len (respCB_dict [case)) на 10), программа вылетает (сообщение об ошибке не отображается, результат не выводится, Процессор добрался до 100% и пришлось закрыть программу). Может кто-нибудь посоветовать, как исправить list.append или как лучше обработать этот цикл извлечения? Спасибо!              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Вы должны использовать цикл for, а не цикл while. В Python вы всегда зацикливаетесь на объекте, в этом случае вы можете зацикливать элемент case:
caseIDlist = []
for case in respCB_dict['cases']: 
    caseIDlist.append(case['caseId'])  
который может быть сокращен с использованием понимания списка до:
caseIDlist = [case['caseId'] for case in respCB_dict['cases']]
Также обратите внимание, что нет никакого смысла брать проанализированный JSON, выгружать его на диск, а затем снова загружать, чтобы снова его проанализировать. Просто возьмите разобранный JSON и передайте его на усмотрение списка:
def parse_caseID_info():
    respCB_json = respCB.json()
    caseIDlist = [case['caseId'] for case in respCB_json['cases']]
    
...