例如,我想解析以下数据,并以此结束。 administrative_area_level_1 = 'Stockholm'
这是我获取JSON的Python代码,现在我想知道如何解析它以获取只有 - 行政区域级别1长名称(即州或地区名称) - 地方长名称(即城市名称) - 解析我的JSON的方法
我可以解析它,但它并不总是出现为administrative_area_1:
jsondata ["results"] [0] ["address_components"] [5] ["long_name"]
上面的行正确地输出了纽约的一个点的“New York”,但对于斯德哥尔摩,它输出了邮政城市,即Johanneshow,而不是行政区域1(地区/州)。 那么如何保证该函数始终返回administrative_area_1,最好不用循环?
我希望它能像以下示例一样工作,并直接访问国家,地区和城市:
logging.info("country:"+str(jsondata["results"][9]["formatted_address"]))
logging.info("administrative_area_level_1:"+str(jsondata["results"][8]["formatted_address"]))
logging.info("locality:"+str(jsondata["results"][8]["formatted_address"]))
谢谢您的提前帮助。
更新
这里有一个很好的答案,给出了我期望的结果。在等待答案的同时,我也尝试自己实现了一个解决方案,看起来可以完成它:
jsondata = json.load(urllib2.urlopen('http://maps.googleapis.com/maps/api/geocode/json?latlng='+str(ad.geopt.lat)+','+str(ad.geopt.lon)+'&sensor=false'))
logging.info("geography:"+str(jsondata["results"][1]["formatted_address"]))
region = None
city = None
for result in jsondata["results"]:
#logging.info("result:"+str(result))
for component in result["address_components"]:
logging.info("components:"+str(component))
logging.info("components type:"+str(component["types"]))
if 'administrative_area_level_1' in component["types"]:
#logging.info(unicode('found admin area:%s' % component["long_name"]))
region = component["long_name"]
if 'locality' in component["types"]:
logging.info("found locality:"+str(component["long_name"]))
city = component["long_name"]
filter()
而不是大循环,使用lambda
而不是条件检查,使用格式化而不是连接。最后一个(字符串格式化)可以极大地提高代码的可读性。但正如我所说,它应该可以工作 :) - Tadeck