Python使用函数从JSON字符串访问组件

2024-05-15 02:16:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从dict访问元素,我有一个solution given by @Bharath来访问JSON字符串特性,但是我无法访问它的几何坐标(lat和lng) 通过result['geometry'][0]['location']['lat']这只给出了第一个lat,但是我想访问它们,就像result['country']&;result['premise']等,它提供了记录中的所有特性。你知道吗

这是JSON字符串

'{"results": [{"address_components": [{"long_name": "Satya Niwas", "short_name": "Satya Niwas", "types": ["establishment", "point_of_interest", "premise"]}, {"long_name": "Kanti Nagar", "short_name": "Kanti Nagar", "types": ["political", "sublocality", "sublocality_level_3"]}, {"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400059", "short_name": "400059", "types": ["postal_code"]}], "formatted_address": "Satya Niwas, Kanti Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400059, India", "geometry": {"bounds": {"northeast": {"lat": 19.1097923, "lng": 72.8675306}, "southwest": {"lat": 19.1095784, "lng": 72.8673391}}, "location": {"lat": 19.1096591, "lng": 72.8674712}, "location_type": "ROOFTOP", "viewport": {"northeast": {"lat": 19.1110343302915, "lng": 72.8687838302915}, "southwest": {"lat": 19.1083363697085, "lng": 72.86608586970848}}}, "place_id": "ChIJ4UsP5DjI5zsR8hgwhHo9wEk", "types": ["establishment", "point_of_interest", "premise"]}, {"address_components": [{"long_name": "82", "short_name": "82", "types": ["premise"]}, {"long_name": "Bamanpuri", "short_name": "Bamanpuri", "types": ["neighborhood", "political"]}, {"long_name": "Ajit Nagar", "short_name": "Ajit Nagar", "types": ["political", "sublocality", "sublocality_level_3"]}, {"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400053", "short_name": "400053", "types": ["postal_code"]}], "formatted_address": "82, Bamanpuri, Ajit Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400053, India", "geometry": {"location": {"lat": 19.109749, "lng": 72.867249}, "location_type": "ROOFTOP", "viewport": {"northeast": {"lat": 19.1110979802915, "lng": 72.8685979802915}, "southwest": {"lat": 19.1084000197085, "lng": 72.86590001970849}}}, "place_id": "ChIJqYip4zjI5zsR0Yg8bdXQX3o", "types": ["street_address"]}, {"address_components": [{"long_name": "Todi Building", "short_name": "Todi Building", "types": ["premise"]}, {"long_name": "Sheth Bhavanidas Benani Marg", "short_name": "Sheth Bhavanidas Benani Marg", "types": ["route"]}, {"long_name": "Kanti Nagar", "short_name": "Kanti Nagar", "types": ["political", "sublocality", "sublocality_level_3"]}, {"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400059", "short_name": "400059", "types": ["postal_code"]}], "formatted_address": "Todi Building, Sheth Bhavanidas Benani Marg, Kanti Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400059, India", "geometry": {"location": {"lat": 19.1098265, "lng": 72.86778869999999}, "location_type": "ROOFTOP", "viewport": {"northeast": {"lat": 19.1111754802915, "lng": 72.86913768029149}, "southwest": {"lat": 19.1084775197085, "lng": 72.86643971970848}}}, "place_id": "ChIJo5bq3zjI5zsR2hRaNQF3xd0", "types": ["premise"]}, {"address_components": [{"long_name": "KASI APARTMENTS", "short_name": "KASI APARTMENTS", "types": ["establishment", "point_of_interest", "premise"]}, {"long_name": "Shriniwas Bagarka Road", "short_name": "Shriniwas Bagarka Rd", "types": ["route"]}, {"long_name": "Bamanpuri", "short_name": "Bamanpuri", "types": ["neighborhood", "political"]}, {"long_name": "Kanti Nagar", "short_name": "Kanti Nagar", "types": ["political", "sublocality", "sublocality_level_3"]}, {"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400059", "short_name": "400059", "types": ["postal_code"]}], "formatted_address": "KASI APARTMENTS, Shriniwas Bagarka Rd, Bamanpuri, Kanti Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400059, India", "geometry": {"location": {"lat": 19.1093338, "lng": 72.8670515}, "location_type": "ROOFTOP", "viewport": {"northeast": {"lat": 19.1106827802915, "lng": 72.86840048029151}, "southwest": {"lat": 19.10798481970849, "lng": 72.86570251970849}}}, "place_id": "ChIJoUz25DjI5zsRiMoiQtq5kXs", "types": ["establishment", "point_of_interest", "premise"]}, {"address_components": [{"long_name": "Silver Line Apts.", "short_name": "Silver Line Apts.", "types": ["premise"]}, {"long_name": "Bamanpuri", "short_name": "Bamanpuri", "types": ["neighborhood", "political"]}, {"long_name": "J.B. Nagar", "short_name": "J.B. Nagar", "types": ["political", "sublocality", "sublocality_level_3"]}, {"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400047", "short_name": "400047", "types": ["postal_code"]}], "formatted_address": "Silver Line Apts., Bamanpuri, J.B. Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India", "geometry": {"location": {"lat": 19.1091075, "lng": 72.8670776}, "location_type": "ROOFTOP", "viewport": {"northeast": {"lat": 19.1104564802915, "lng": 72.86842658029151}, "southwest": {"lat": 19.1077585197085, "lng": 72.86572861970849}}}, "place_id": "ChIJEQ3_ZzjI5zsR9LxIP1h2b2c", "types": ["premise"]}, {"address_components": [{"long_name": "Gokul panch chs", "short_name": "Gokul panch chs", "types": ["establishment", "point_of_interest"]}, {"long_name": "81-B", "short_name": "81-B", "types": ["street_number"]}, {"long_name": "Sheth Bhavanidas Benani Marg", "short_name": "Sheth Bhavanidas Benani Marg", "types": ["route"]}, {"long_name": "Bamanpuri", "short_name": "Bamanpuri", "types": ["neighborhood", "political"]}, {"long_name": "Ajit Nagar", "short_name": "Ajit Nagar", "types": ["political", "sublocality", "sublocality_level_3"]}, {"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400047", "short_name": "400047", "types": ["postal_code"]}], "formatted_address": "Gokul panch chs, 81-B, 81-B, Sheth Bhavanidas Benani Marg, Bamanpuri, Ajit Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India", "geometry": {"location": {"lat": 19.1098713, "lng": 72.86705669999999}, "location_type": "ROOFTOP", "viewport": {"northeast": {"lat": 19.1112202802915, "lng": 72.8684056802915}, "southwest": {"lat": 19.1085223197085, "lng": 72.8657077197085}}}, "place_id": "ChIJpUuz4jjI5zsRpgQdmR5E1v0", "types": ["establishment", "point_of_interest"]}, {"address_components": [{"long_name": "Ajit Nagar", "short_name": "Ajit Nagar", "types": ["political", "sublocality", "sublocality_level_3"]}, {"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400047", "short_name": "400047", "types": ["postal_code"]}], "formatted_address": "Ajit Nagar, J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India", "geometry": {"bounds": {"northeast": {"lat": 19.1119198, "lng": 72.8714133}, "southwest": {"lat": 19.1085396, "lng": 72.8662167}}, "location": {"lat": 19.1103164, "lng": 72.8680732}, "location_type": "APPROXIMATE", "viewport": {"northeast": {"lat": 19.1119198, "lng": 72.8714133}, "southwest": {"lat": 19.1085396, "lng": 72.8662167}}}, "place_id": "ChIJPWPg4zjI5zsRJWPFphEkcxc", "types": ["political", "sublocality", "sublocality_level_3"]}, {"address_components": [{"long_name": "Bamanpuri", "short_name": "Bamanpuri", "types": ["neighborhood", "political"]}, {"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400047", "short_name": "400047", "types": ["postal_code"]}], "formatted_address": "Bamanpuri, J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India", "geometry": {"bounds": {"northeast": {"lat": 19.1102874, "lng": 72.869838}, "southwest": {"lat": 19.1060651, "lng": 72.8635609}}, "location": {"lat": 19.1084347, "lng": 72.86574929999999}, "location_type": "APPROXIMATE", "viewport": {"northeast": {"lat": 19.1102874, "lng": 72.869838}, "southwest": {"lat": 19.1060651, "lng": 72.8635609}}}, "place_id": "ChIJIYgnUDjI5zsRK_Zl9Zy_QkY", "types": ["neighborhood", "political"]}, {"address_components": [{"long_name": "J B Nagar", "short_name": "J B Nagar", "types": ["political", "sublocality", "sublocality_level_2"]}, {"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}, {"long_name": "400047", "short_name": "400047", "types": ["postal_code"]}], "formatted_address": "J B Nagar, Andheri East, Mumbai, Maharashtra 400047, India", "geometry": {"bounds": {"northeast": {"lat": 19.1161579, "lng": 72.871533}, "southwest": {"lat": 19.1008041, "lng": 72.8606231}}, "location": {"lat": 19.1110621, "lng": 72.8655922}, "location_type": "APPROXIMATE", "viewport": {"northeast": {"lat": 19.1161579, "lng": 72.871533}, "southwest": {"lat": 19.1008041, "lng": 72.8606231}}}, "place_id": "ChIJt8_u6TjI5zsRR9eE5rMK45A", "types": ["political", "sublocality", "sublocality_level_2"]}, {"address_components": [{"long_name": "Andheri East", "short_name": "Andheri East", "types": ["political", "sublocality", "sublocality_level_1"]}, {"long_name": "Mumbai", "short_name": "Mumbai", "types": ["locality", "political"]}, {"long_name": "Mumbai Suburban", "short_name": "Mumbai Suburban", "types": ["administrative_area_level_2", "political"]}, {"long_name": "Maharashtra", "short_name": "MH", "types": ["administrative_area_level_1", "political"]}, {"long_name": "India", "short_name": "IN", "types": ["country", "political"]}], "formatted_address": "Andheri East, Mumbai, Maharashtra, India", "geometry": {"bounds": {"northeast": {"lat": 19.1327276, "lng": 72.89305499999999}, "southwest": {"lat": 19.096748, "lng": 72.843926}}, "location": {"lat": 19.1154908, "lng": 72.8726952}, "location_type": "APPROXIMATE", "viewport": {"northeast": {"lat": 19.1327276, "lng": 72.89305499999999}, "southwest": {"lat": 19.096748, "lng": 72.843926}}}, "place_id": "ChIJMbHfQRu25zsRMazdY3UpaKY", "types": ["political", "sublocality", "sublocality_level_1"]}], "status": "OK"}'

下面是代码片段

from pandas.io.json import json_normalize
import json
import numpy as np

line='JSON_STRING'
data = json.loads(line)
result = json_normalize(data,'results')
def get_cols(st):
    pol = []
    for i in result['address_components'].apply(json_normalize):
         pol.append(','.join(i.apply(lambda x : x['long_name'] if st in x['types'] else np.nan,1).dropna()))
    return  pol

result['political'] = get_cols('political') 
result['room'] = get_cols('room') 
result['floor'] = get_cols('floor') 
result['premise'] = get_cols('premise') 

# How do I add lat and long keys here?
# result['lat'] = ...
# result['lng'] = ...

但是我想访问latlng下的result['geometry'][i]['location']['lat'];;result['geometry'][i]['location']['lng'] 任何关于如何使用同一功能的建议。你知道吗


Tags: nameaddresslocationlevellongtypesshortlng
1条回答
网友
1楼 · 发布于 2024-05-15 02:16:32

您也可以在geometry框架上使用json_normalize

def get_geometry_col(st):
    return result['geometry'].apply(json_normalize).apply(lambda df: df[st])

result['lat'] = get_geometry_col('location.lat') 
result['lng'] = get_geometry_col('location.lng') 

在这里提取要简单得多,因为位置值总是存在的。你知道吗

相关问题 更多 >

    热门问题