2016-06-16 23 views
-1

Ich habe ein großes JSON Element über ein REST-API zurückgegeben, ich werde nicht das mit dem vollständigen Text Junk, aber hier ist der Code Ich bin derzeit mit:Extrahieren von Daten aus JSON

import urllib2 
import json 
req =  urllib2.Request 
('http://elections.huffingtonpost.com/ 
pollster/api/polls.json?state=IA') 
response = urllib2.urlopen(req) 
the_page = response.read() 
decode = json.loads(the_page) 
#print = decode #removed, because it is not actually related to the question 
print decode 

ich versucht haben, Extrahieren Sie Informationen wie das Datum, an dem Umfragen aktualisiert werden, die tatsächlichen Daten der Umfragen usw. (insbesondere die Präsidentschaftsumfragen), aber ich habe Probleme, überhaupt irgendwelche Daten zurückzugeben. Kann jemand helfen?

EDIT: Die eigentliche Frage ist, wie Daten abzufragen aus dem zurückgegebenen Array/dict

+0

Sie ein bisschen auf https lesen sollten : //docs.python.org/3/tutorial/datastructures.html Datenstrukturen, und erhalten Sie ein konkretes Beispiel für das, was Sie mit einer Fehlermeldung versucht haben – glls

+1

'print = decode' Was genau versuchen Sie zu erreichen? –

+0

Code funktioniert gut für mich, wenn Sie 'print = decode' in' print decode' ändern. Verwenden Sie 'pprint.pprint (decode)' – davedwards

Antwort

2

Das Problem ist, dass Sie print mit Ihren Daten überschreiben, anstatt die Daten zu drucken. Entfernen Sie einfach die = in der letzten Zeile und es sollte funktionieren:

print decode 

Wenn Sie 3 Python verwenden möchten, können Sie Klammern für print benötigen. Dies würde wie folgt aussehen:

print(decode) 

Edit: Wie Sie Ihre Frage aktualisiert, hier eine Antwort auf Ihre eigentliche Frage: Die Daten werden als eine Kombination von dicts und Listen durch die loads Funktion zurückgegeben. Somit können Sie auch auf die Daten wie ein Diktat/eine Liste zugreifen. Um zum Beispiel das last_updated Feld aller Umfragen in einer Liste zu erhalten, können Sie etwas tun:

all_last_updated = [poll['last_updated'] for poll in decode] 

Oder bekommen nur das Enddatum aller von „Verfassungs Responsibility Projekt“ gesponserte Umfragen, die Sie tun können dies:

end_dates = [poll['end_date'] for poll in decode if any(sponsor['name'] == 'Constitutional Responsibility Project' for sponsor in poll['sponsors'])] 

Oder wenn Sie wollen einfach nur die ID der ersten Umfrage in der Liste zu tun:

the_id = decode[0]['id'] 

Sie Zugriff auf alles, was Sie von der json in ähnlicher Weise wollen.

+0

Danke! Das print = decode war eigentlich ein Tippfehler, ich drucke normalerweise decode, aber ich habe es wieder eingefügt, um mit meinem Code abzuschließen, obwohl es für das, was ich frage, nicht relevant ist. Leider denke ich nicht, dass ich mit meiner Frage sehr klar gewesen bin. Ich erhalte Rücksendungen wie: [{u'last_updated ': u'2016-06-16T15: 48: 18.784 + 00: 00', u'end_date ': u'2016-06-13', u'pollster ': u "PPP (D-Constitutional Responsibility Project)", "Vereinigung": u'Dem ',' partisan ':' Sponsor ', u'survey_houses': und ich möchte Informationen daraus gewinnen, wie würde ich das tun ? - – JSwordy

+0

Ich habe gerade meine Antwort aktualisiert, um der aktualisierten Frage zu entsprechen. Hilft Ihnen das herauszufinden, wie Sie die gewünschten Daten erhalten? – Leon

+0

Danke! Das war sehr, sehr hilfreich! Kann ich Listen auf diese Weise zurückgeben? Es gibt beispielsweise einen Abschnitt mit Abstimmungen für {"name": "Registrierte Abstimmungen", "Beobachtungen": 630, "margin_of_error": 3.9, "Antworten": und der Wert für "Antworten" ist das tatsächliche Abstimmungsdatum. Wie würde ich das abrufen? – JSwordy

0

es ist, weil Sie tun

print = decode 

statt, wenn Sie Python 2 tun verwenden

print decode 

oder in Python 3 do

print(decode) 
+0

Danke! Das print = decode war eigentlich ein Tippfehler, ich drucke normalerweise decode, aber ich habe es wieder eingefügt, um mit meinem Code abzuschließen, obwohl es für das, was ich frage, nicht relevant ist. Leider denke ich nicht, dass ich mit meiner Frage sehr klar gewesen bin. Ich erhalte Rücksendungen wie: [{u'last_updated ': u'2016-06-16T15: 48: 18.784 + 00: 00', u'end_date ': u'2016-06-13', u'pollster ': u "PPP (D-Constitutional Responsibility Project)", "Vereinigung": u'Dem ',' partisan ':' Sponsor ', u'survey_houses': und ich möchte Informationen daraus gewinnen, wie würde ich das tun ? – JSwordy