2016-04-14 18 views
0

私はAPIを学ぶためにしようとしていると私は得http://api.zippopotam.us/us/90210への呼び出しがあります。解析REST API結果パイソン

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

APIは、「場所」を返すために、国(米国)と郵便番号を使用していますが。 `:「文字列のインデックスの整数でなければなりません例外TypeErrorが」しかし、私はというエラーメッセージが表示されます

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

:私はそうのような変数に「場所」セグメントを解析しようとしました。この長いリストを解析して「場所名」、「状態」などを抽出する別の方法はありますか?

ありがとうございます!この回答から引用

+0

あなたが持っているものはjsonの文字列です。 jsonデータをPythonオブジェクトに変換するには、jsonパーサが必要です。 'json'モジュールを使って解析するこの(非常に)簡単なチュートリアルをご覧ください - http://docs.python-guide.org/ja/latest/scenarios/json/ – Munir

答えて

1

:若干の差異があるとして、あなたは、Python 3.xを使用している場合は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():

は、実際の答えを見てください。

あなたの場合、まず第一に、という名前の鍵はapi_returnにありません。たとえそれが正しいとしても、あなたはまだ誤りがあるでしょう。

あなたはすべてのデータにアクセスする必要がある場合は、最も簡単な方法は、以下のようにすべてのキーをチェックするために、forループ内のif文含めることです:あなたは、あなたが一つの値だけが必要な場合は

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

をforループをスキップし、単に実行することができ:

places = api_return['places'] 

示すスニペットの両方がplaces[0]が他の辞書であり、ちょうど上記のように検討することができplaces、それをapi_return['places']内部に含まれる内部配列を返し、格納します。

EDIT: は混乱を避けるために、あなたもmightyKeyboardを以下に示したと同じように、jsonを使用して、受信した文字列を解析する必要があります。

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'] 
関連する問題