В Python, как правильно выводить элементы, извлеченные из json с помощью цикла - PullRequest
0 голосов
/ 05 июля 2019

Я новичок в программировании.Я использую Python 3.7.3.В моем рабочем процессе я получаю данные JSON из первого REST API, который мне нужно проанализировать, чтобы передать второй REST API.

Мои данные JSON, похоже, содержат слова, содержащие один список ["падежей""], содержащий 10000 диктов, каждая из которых содержит 4 (k, v) пары, из которых мне нужно извлечь список ключевых значений ['caseId'].

Мой JSON выглядит так:

{"cases": [
{"databaseId": "csc-scc", "caseId": {"en": "2017scc64"}, "title": "R. v. Boutilier", "citation": "[2017] 2 SCR 936"}, 
{"databaseId": "csc-scc", "caseId": {"en": "2017scc63"}, "title": "Deloitte v. Livent", "citation": "[2017] 2 SCR 855"}]}

Мне нужны значения 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% и пришлось закрыть программу).

Может кто-нибудь посоветовать, как исправить список.добавить или как лучше обработать этот цикл извлечения?

Спасибо!

1 Ответ

0 голосов
/ 05 июля 2019

Вы должны использовать цикл 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']]
...