2016-06-16 2 views
0

Я хочу извлечь данные «long_name», представленные в «address_components» в приведенном ниже json. Задача состоит в том, что я хочу только данные «long_name», чьи «типы» - «Administrative_area_level_2». пожалуйста, дайте мне знать, как извлекать только те конкретные данные, которые желательно использовать в python. СпасибоКак извлечь определенные данные из json с помощью python

Редактировать: Обратите внимание, что js ["results"] [0] ["address_components"] [2] ["long_name"] не так, как я хочу извлечь его значение, поскольку ["address_components"] [2] хранит изменяясь для разных мест, указанных в качестве входных данных. мой основной критерий является то, чтобы извлечь данные «параметр long_name», чей «типы» всегда «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" 
      ] 
     } 
    ] 
} 

Ниже приведен код, который я пытаюсь, но я получаю выход только до места. Дайте мне знать, какие изменения мне необходимо внести в моем коде.

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']] 

Здесь имена будут включать параметр long_name всех компонентов, которые имеют administrative_area_level_2 в их типах

+0

Эй, большое вам спасибо за помощь. но можете ли вы ответить на мой код выше? заранее спасибо –

+0

он основан на вашем коде! js - ваш тест json, оцененный в dict. Я могу уточнить, что – Nikign

+0

Эй, Ники, это сработало, спасибо, я очень благодарю вашу помощь. –

0

Это это одно решение для линейки, если вам это нравится

находится в 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

Эй, большое вам спасибо за вашу помощь. но можете ли вы ответить на мой код выше? Благодарю. –

Смежные вопросы