37

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>>

何を間違えたのですか?

4

3 に答える 3

58

実際、 を照会する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']
于 2013-01-27T14:25:24.990 に答える
10

これを試して :

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']
于 2013-01-27T13:39:46.673 に答える
0

json をデコードするには、json 文字列を渡す必要があります。現在、オブジェクトを渡そうとしています:

>>> response = urlopen(url)
>>> response
<addinfourl at 2146100812 whose fp = <socket._fileobject object at 0x7fe8cc2c>>

でデータを取得できますresponse.read()

于 2013-01-27T13:49:47.300 に答える