Как я могу перебирать записи в JSON?
Я хочу перебрать содержимое файла JSON и распечатать его на консоли.
Я думаю, что я что-то перепутал со списками.
Вот что я пытался получить все элементы team_name
from urllib2 import urlopen
import json
url = 'http://openligadb-json.heroku.com/api/teams_by_league_saison?league_saison=2012&league_shortcut=bl1'
response = urlopen(url)
json_obj = json.load(response)
for i in json_obj['team']:
print i
И это мой JSON (упрощенный:)
{
"team": [
{
"team_icon_url": "http://www.openligadb.de/images/teamicons/Hamburger_SV.gif",
"team_id": "100",
"team_name": "Hamburger SV"
},
{
"team_icon_url": "http://www.openligadb.de/images/teamicons/FC_Schalke_04.gif",
"team_id": "9",
"team_name": "FC Schalke 04"
}
]
}
(Полный вывод JSON можно найти здесь: Ссылка)
И, конечно, я получаю сообщение об ошибке, что я должен использовать целочисленный ввод в [], а не строку, но я не понимаю, как это сделать.
for i in json_obj['team']:
TypeError: string indices must be integers, not str
Вот response
:
http://openligadb-json.heroku.com/api/teams_by_league_saison?league_saison=2012&league_shortcut=bl1
<addinfourl at 139755086292608 whose fp = <socket._fileobject object at 0x7f1b446d33d0>>
Чем я ошибаюсь?
Ответы
Ответ 1
Собственно, для запроса team_name
просто добавьте его в скобки в последнюю строку. Кроме того, он работает на Python 2.7.3 в командной строке.
from urllib2 import urlopen
import json
url = 'http://openligadb-json.heroku.com/api/teams_by_league_saison?league_saison=2012&league_shortcut=bl1'
response = urlopen(url)
json_obj = json.load(response)
for i in json_obj['team']:
print i['team_name']
Ответ 2
Вы можете попробовать это?
import urllib, urllib2, json
url = 'http://openligadb-json.heroku.com/api/teams_by_league_saison?league_saison=2012&league_shortcut=bl1'
request = urllib2.Request(url)
request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
request.add_header('Content-Type','application/json')
response = urllib2.urlopen(request)
json_object = json.load(response)
#print json_object['results']
if json_object['team'] == []:
print 'No Data!'
else:
for rows in json_object['team']:
print 'Team ID:' + rows['team_id']
print 'Team Name:' + rows['team_name']
print 'Team URL:' + rows['team_icon_url']
Ответ 3
Чтобы декодировать json, вам нужно передать строку json. В настоящее время вы пытаетесь передать объект:
>>> response = urlopen(url)
>>> response
<addinfourl at 2146100812 whose fp = <socket._fileobject object at 0x7fe8cc2c>>
Вы можете получить данные с помощью response.read()
.