Une itération à travers un objet JSON
Je suis en train de parcourir un objet JSON pour importer des données, c'est à dire le titre et le lien. Je n'arrive pas à obtenir le contenu est au-delà de la :
.
JSON:
[
{
"title": "Baby (Feat. Ludacris) - Justin Bieber",
"description": "Baby (Feat. Ludacris) by Justin Bieber on Grooveshark",
"link": "http://listen.grooveshark.com/s/Baby+Feat+Ludacris+/2Bqvdq",
"pubDate": "Wed, 28 Apr 2010 02:37:53 -0400",
"pubTime": 1272436673,
"TinyLink": "http://tinysong.com/d3wI",
"SongID": "24447862",
"SongName": "Baby (Feat. Ludacris)",
"ArtistID": "1118876",
"ArtistName": "Justin Bieber",
"AlbumID": "4104002",
"AlbumName": "My World (Part II);\nhttp://tinysong.com/gQsw",
"LongLink": "11578982",
"GroovesharkLink": "11578982",
"Link": "http://tinysong.com/d3wI"
},
{
"title": "Feel Good Inc - Gorillaz",
"description": "Feel Good Inc by Gorillaz on Grooveshark",
"link": "http://listen.grooveshark.com/s/Feel+Good+Inc/1UksmI",
"pubDate": "Wed, 28 Apr 2010 02:25:30 -0400",
"pubTime": 1272435930
}
]
J'ai essayé à l'aide d'un dictionnaire:
def getLastSong(user,limit):
base_url = 'http://gsuser.com/lastSong/'
user_url = base_url + str(user) + '/' + str(limit) + "/"
raw = urllib.urlopen(user_url)
json_raw= raw.readlines()
json_object = json.loads(json_raw[0])
#filtering and making it look good.
gsongs = []
print json_object
for song in json_object[0]:
print song
Ce code affiche seulement les informations avant de les :
.
(ignorer le Justin Bieber de la piste :))
Vous devez vous connecter pour publier un commentaire.
Votre chargement de données JSON est un peu fragile. Au lieu de:
vous devriez vraiment faire:
Vous ne devriez pas penser à ce que vous obtenez comme un "objet JSON". Ce que vous avez une liste. La liste contient deux dicts. Les dicts contenir plusieurs paires clé/valeur, toutes les chaînes. Lorsque vous ne
json_object[0]
, vous demandez pour la première dict dans la liste. Lorsque vous parcourez cette, avecfor song in json_object[0]:
, vous itérer sur les touches de la dict. Parce que c'est ce que vous obtenez lorsque vous parcourez le dict. Si vous souhaitez accéder à la valeur associée à la clé dans ce dict, vous pouvez utiliser, par exemple,json_object[0][song]
.Rien de tout cela est spécifique à JSON. C'est juste de base de Python les types, avec leurs opérations de base couvertes dans le tutoriel.
json_object
, pasjson_object[0]
, et ensuite d'obtenir des éléments individuels de chaque dict.Je crois que vous avez probablement dire:
NB: l'utilisation
song.items
au lieu desong.iteritems
pour Python 3.for (attribute, value) in song.iteritems():
, ou(var1, var2) = (1, 2)
ouvar1, var2 = 1, 2
.dict.iteritems()
produit(key, value)
paires (n-uplets). Recherche pour “python tuple déballage”.song.iteritems
àsong.items
.Cette question a été ici longtemps, mais je voulais contribuer de la façon dont j'ai l'habitude de parcourir un objet JSON. Dans l'exemple ci-dessous, je vous ai montré une chaîne codée en dur qui contient le JSON, mais la chaîne JSON pourrait tout aussi bien venir d'un service web ou un fichier.
jsonObject
est undict
. Dans le code ci-dessus, je préfèrefor key, value in jsonObject.items():
.Après la désérialisation du JSON, vous avez un objet python. Utilisez les méthodes de l'objet.
Dans ce cas, vous avez une liste de dictionnaires:
etc.
Je voudrais résoudre ce problème de plus comme cette
Pour Python 3, vous avez pour décoder les données que vous obtenez de retour à partir du serveur web. Par exemple, j'ai décoder les données utf8 puis traiter avec elle:
Si vous n'avez pas décoder, vous obtiendrez octets vs chaîne des erreurs dans Python 3.
pour parcourir en JSON, vous pouvez utiliser ceci: