2016-04-14 7 views
0

Ich versuche API zu lernen, und ich habe einen Aufruf an http://api.zippopotam.us/us/90210 die ergeben: den „Ort“ zurückzukehrenParsing REST api Ergebnis Python

{"post code": "90210", "country": "United States", "country abbreviation": "US", "places": [{"place name": "Beverly Hills", "longitude": "-118.4065", "state": "California", "state abbreviation": "CA", "latitude": "34.0901"}]} 

Die API verwendet Land (US) und die Postleitzahl. Ich versuchte, den „Ort“ Segment auf eine Variable wie so zu analysieren:

for item in api_return: 
    place = item['place'] 

Allerdings habe ich eine Fehlermeldung sagen „Typeerror: String-Indizes ganze Zahlen sein müssen“ `. Gibt es eine andere Möglichkeit, diese lange Liste zu analysieren, um den "Ortsnamen", "Zustand" usw. zu extrahieren?

Vielen Dank im Voraus!

+0

Was Sie haben, ist eine JSON-Zeichenfolge. Sie benötigen einen JSON-Parser, um die JSON-Daten in Python-Objekte zu konvertieren. Sehen Sie sich dieses (sehr) einfache Tutorial an, das 'json'-Modul zum Parsen verwendet - http://docs.python-guide.org/en/latest/scenarios/json/ – Munir

Antwort

1

Zitiert aus dieser Antwort: https://stackoverflow.com/a/3294899/3474873

for key in d : will simply loop over the keys in the dictionary, rather than the keys and values. To loop over both key and value you can use the following:

for key, value in d.iteritems():

Werfen Sie einen Blick auf die tatsächliche Antwort, wenn Sie Python 3.x verwenden, da es einige geringfügige Unterschiede.

Jetzt in Ihrem Fall. Zuerst gibt es keinen Schlüssel mit dem Namen "place" in api_return. Selbst wenn du es richtig gemacht hättest, hättest du immer noch einen Fehler bekommen.

Wenn Sie alle Daten zugreifen müssen, dann ist der einfachste Weg, um eine if-Anweisung enthalten innerhalb der for-Schleife alle wie unten die Schlüssel zu überprüfen:

for key, value in d.iteritems(): 
    if (key == "places"): 
     places = value 
    elif ... 

Wenn Sie nur einen Wert benötigen, können Sie dann kann die für die Schleife überspringen und einfach auszuführen:

places = api_return['places'] 

Beide der dargestellten Schnipsel werden die innere Anordnung innerhalb api_return['places'] und speichern sie in places enthaltenen zurückzukehren, wo ein weiterer places[0] Wörterbuch ist und kann wie oben untersucht werden .

EDIT: Um Verwirrung zu vermeiden, müssen Sie auch die empfangene Zeichenfolge mit json analysieren, hat genau wie mightyKeyboard unten.

0
import json 

data_str = '{"post code": "90210", "country": "United States", "country abbreviation": "US", "places": [{"place name": "Beverly Hills", "longitude": "-118.4065", "state": "California", "state abbreviation": "CA", "latitude": "34.0901"}]}' 

data_json = json.loads(data_str) 

for item in data_json['places']: 
    print item['place name'] 

#you can access the 'places' key-vals via the following, but 
#it's not that pretty 
print data_str['places'][0]['place name']