Как отобразить все имена команд с их идентификаторами из файла json, подобного этому, с помощью python

#python #json

Вопрос:

https://www.goalserve.com/getfeed/2633a3fcbb2b4558740708d89fcf1b20/football/nfl-standings

я посмотрел пару видео об извлечении объектов json с помощью python, но мне не удалось найти ни одного с объектами внутри объектов.

 import pandas as pd
import random 
import numpy as np
import requests
import json
 
#%%
response = requests.get("https://www.goalserve.com/getfeed/2633a3fcbb2b4558740708d89fcf1b20/football/nfl-standings?json=1")
output = response.json()
 
# Extract specific node content.
data = output['standings']['category']['league']
# print(output['standings']['category']['league'])
 

#print(type(data))

#for team in range(len(data)):
 #   print(team['division'])


# Dump data as string
data = json.dumps(output, indent=4)
print(data)


for team in data['division']['team']:
   print(team)
 

я получаю эту ошибку «строковые индексы должны быть целыми числами». Как я могу получить доступ к атрибутам для каждой записи команды?

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

1. обновление: печать(тип(вывод)) # Извлеките содержимое определенного узла. данные = вывод[«турнирная таблица»] [«категория»][«лига»] # печать(вывод[«турнирная таблица»] [«категория»][«лига»]) печать(тип(данные)) #печать(тип(данные)) печать(данные[0] [«подразделение»] [0] [«команда»] [0] [«имя»]), при этом отображается название команды

Ответ №1:

Привет, Согласно вашему коду, я вижу один недостаток, который заключается в том, что нет проверки.

сделайте эти две проверки после этого, обработайте запрос

  1. if response.status_code==200
  2. if response and response.text

после проверки вы можете передать ответ для обработки данных.

Ответ №2:

Здесь есть пара проблем. Во-первых, эта строка:

 data = json.dumps(output, indent=4)
 

преобразует структуру данных в data переменной обратно в строку, поэтому вы не можете рассматривать ее как словарь.

Вторая проблема заключается в том, что структура данных здесь представляет собой смесь словарей и списков, поэтому вам нужно рассматривать data список лиг как список, а не словарь. То же самое относится league['division'] и division['team'] к и.

Вот версия, в которой печатаются названия команд:

 import pandas as pd
import random
import numpy as np
import requests
import json

response = requests.get("https://www.goalserve.com/getfeed/2633a3fcbb2b4558740708d89fcf1b20/football/nfl-standings?json=1")
output = response.json()

data = output['standings']['category']['league']

for league in data:
  for division in league['division']:
    for team in division['team']:
      print(team['name'])