web-dev-qa-db-fra.com

Comment puis-je boucler les entrées en JSON?

Je souhaite parcourir le contenu d'un fichier JSON et l'imprimer sur la console.

Je pense avoir mélangé quelque chose avec des listes.

C’est ce que j’ai essayé d’obtenir tous les éléments 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

Et voici mon JSON (simplifié :)

{
    "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"
        }
    ]
}

(La sortie JSON complète se trouve ici: Lien )

Et bien sûr, je reçois une erreur, que je devrais utiliser une entrée entière dans [], pas une chaîne, mais je ne vois pas comment je pourrais le faire.

for i in json_obj['team']:
TypeError: string indices must be integers, not str

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

Qu'est-ce que je me suis trompé?

22
mcbetz

En fait, pour interroger le team_name, ajoutez-le entre parenthèses à la dernière ligne. En dehors de cela, il semble fonctionner sur Python 2.7.3 en ligne de commande.

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']
46
mcbetz

Essaye ça :

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']
6
Prem Minister

Pour décoder JSON, vous devez passer la chaîne JSON. Actuellement, vous essayez de passer un objet:

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

Vous pouvez récupérer les données avec response.read().

0
Karoly Horvath