2016-06-16 21 views
0

下記のjsonの "address_components"にある "long_name"データを抽出します。課題は、 "タイプ"が "administrative_area_level_2"の "long_name"データだけです。好ましくはPythonで特定のデータのみを抽出する方法を教えてください。おかげjsonからPythonを使用して特定のデータを抽出する方法

編集:それは[ "結果"] [0] [ "address_components"] [2] [ "LONG_NAMEを"] JS注意することは、私は[ "address_components"]以来、その値を抽出する方法ではありません[2]保ちます入力として与えられた異なる位置に対して変化する。私の主な基準は、以下の「種類」は常に「administrative_area_level_2」

{ 
    "status": "OK", 
    "results": [ 
     { 
      "geometry": { 
       "location_type": "APPROXIMATE", 
       "bounds": { 
        "northeast": { 
         "lat": 12.9177876, 
         "lng": 80.24104 
        }, 
        "southwest": { 
         "lat": 12.875989, 
         "lng": 80.20860669999999 
        } 
       }, 
       "viewport": { 
        "northeast": { 
         "lat": 12.9177876, 
         "lng": 80.24104 
        }, 
        "southwest": { 
         "lat": 12.875989, 
         "lng": 80.20860669999999 
        } 
       }, 
       "location": { 
        "lat": 12.9009877, 
        "lng": 80.2279301 
       } 
      }, 
      "formatted_address": "Sholinganallur, Chennai, Tamil Nadu, India", 
      "place_id": "ChIJGzh_3nlbUjoRGz_-itQtu_8", 
      "address_components": [ 
       { 
        "long_name": "Sholinganallur", 
        "types": [ 
         "sublocality_level_1", 
         "sublocality", 
         "political" 
        ], 
        "short_name": "Sholinganallur" 
       }, 
       { 
        "long_name": "Chennai", 
        "types": [ 
         "locality", 
         "political" 
        ], 
        "short_name": "Chennai" 
       }, 
       { 
        "long_name": "Kanchipuram", 
        "types": [ 
         "administrative_area_level_2", 
         "political" 
        ], 
        "short_name": "Kanchipuram" 
       }, 
       { 
        "long_name": "Tamil Nadu", 
        "types": [ 
         "administrative_area_level_1", 
         "political" 
        ], 
        "short_name": "TN" 
       }, 
       { 
        "long_name": "India", 
        "types": [ 
         "country", 
         "political" 
        ], 
        "short_name": "IN" 
       } 
      ], 
      "partial_match": true, 
      "types": [ 
       "sublocality_level_1", 
       "sublocality", 
       "political" 
      ] 
     } 
    ] 
} 

ある「LONG_NAME」のデータを抽出することである私がしようとしていますコードですが、私は唯一の場所までの出力を取得します。私のコードでどのような変更が必要かを教えてください。

import urllib 
import json 

apiurl= 'http://maps.googleapis.com/maps/api/geocode/json?' 

while True: 
    address = raw_input('Enter location: ') 
    if len(address) < 1 : break 

    url = apiurl + urllib.urlencode({'sensor':'false', 'address':  address}) 
    print 'Retrieving', url 
    uh = urllib.urlopen(url).read() 

    print 'Retrieved',len(uh),'characters' 
    js = json.loads(str(uh)) 
    print json.dumps(js, indent=4) 
    jayz = js["results"][0] 
    lat = jayz["geometry"]["location"]["lat"] 
    lng = jayz["geometry"]["location"]["lng"] 
    print 'lat',lat,'lng',lng 
    location = jayz['formatted_address'] 
    print location 
    components = js["results"][0]["address_components"] 
    names = [component['long_name'] for component in components if 'administrative_area_level_2' in component['types']] 
    name = names[0] 
    print "District:", name 

答えて

0

あなたはそれらのコンポーネントやループを取得し、ここで

js = eval(input_file.read()) 
components = js["results"][0]["address_components"] 
names = [component['long_name'] for component in components if 'administrative_area_level_2' in component['types']] 

ものを見つけることができ、名前はその型

+0

お世話になりました。上記のコードに基づいて答えることができますか?事前に感謝 –

+0

それはあなたのコードに基づいています! jsはあなたのjsonテストで評価されたものです。私はそれを更新することができます – Nikign

+0

こんにちはニキ、それは働いた、おかげで本当にあなたの助けに感謝 –

0

これにadministrative_area_level_2ているすべてのコンポーネントのLONG_NAMEが含まれますあなたが好きなら、1つのライナーソリューションです

これはPythonにあります

my_long_names = [[component.get("long_name") for component in result.get("address_components") if "administrative_area_level_2" in component.get("types")] for result in data.get("results") ] 
print my_long_names 
+0

こんにちはあなたの助けをありがとう。上記のコードに基づいて答えることができますか?ありがとう。 –