2012-10-14 3 views
-1

J'essaye d'analyser certaines données json en utilisant python et j'ai du mal à parcourir les différents éléments. Il semble que toutes les données se trouvent dans une liste et qu'il existe un dictionnaire différent pour chaque élément de la liste globale. Voilà ce que j'ai jusqu'à présent:Comment analyser json avec python?

try: 
     f = urllib.urlopen("http://www.reddit.com/r/videos/top/.json"); 
    except Exception: 
     print("ERROR: malformed JSON response from reddit.com") 
    reddit_posts = json.loads(f.read().decode("utf-8"))["data"]["children"][0] 
    print reddit_posts["data"]["media"]["oembed"]["url"] 

je peux obtenir le premier URL pour montrer, mais je ne suis pas sûr de savoir comment itérer pour tous les articles et montrer les urls. Aucun conseil?

Aussi, voici une meilleure vue de la mise en forme JSON je suis en train d'analyser: http://jsonviewer.stack.hu/#http://www.reddit.com/r/videos/top/.json

Edit: J'ai essayé la boucle, mais je suis de la difficulté à mettre en œuvre.

for entry in reddit_posts: 
    print entry[0] #only prints the first character of entry ('k' and 'd') 
    print entry["data"] #get an error: string indices must be integers 
+2

Utilisez une boucle 'for': http://docs.python.org/tutorial/controlflow.html#for-statements – Blender

+0

@Blender J'ai essayé de mettre une boucle for (c'est dans le edit) mais j'ai du mal à le faire – sharataka

Répondre

1

Vous avez sélectionné un seul message lorsque vous avez fait [0] sur la ["children"] du résultat JSON.

Par conséquent, pour obtenir tous messages, laisser tomber le [0]:

reddit_posts = json.loads(f.read().decode("utf-8"))["data"]["children"] 

Maintenant, vous pouvez itérer sur tous:

for post in reddit_posts: 
    print post["data"]["media"]["oembed"]["url"] 
+1

Quand j'essaie de recevoir une erreur TypeError: 'NoneType 'l'objet n'est pas indicable – sharataka

+0

Je suis en mesure de voir l'URL dans la ligne de commande, mais le navigateur affiche l'erreur que j'ai mentionné ci-dessus. – sharataka