我从 SQL 表中获取 JSON 数据并对其进行解析,以便从中获取很少的组件,但对于特定列我无法执行此操作。 lat
和 lng
保持为 NULL,否则所有内容都会更新。
这是片段
ID=[]
json_string=[]
for row in cursor.fetchall():
ID.append(row[0])
json_string.append(row[1])
#print('fetched')
address_fields = {
'intersection': [],
'political': [],
'country': []
}
dumpData = json.dumps(json_string)
json_all = json.loads(dumpData)
id_index = 0
for json_str in json_all:
address_fields = {
'intersection': [],
'political': [],
'country': [],
}
try:
json_results = json.loads(json_str)
print(id_index,' Updation starts')
if isinstance(json_results,dict):
first_address_components = json_results['results'][0]['address_components']
else:
first_address_components = json_results[0]['address_components']
for item in first_address_components:
for field_key in address_fields.keys():
if field_key in item['types']:
address_fields[field_key].append(item['long_name'])
address_fields[field_key].append(item['results'][0]['geometry']['location']['lat'])
address_fields[field_key].append(item['results'][0]['geometry']['location']['lng'])
# convert lists to single strings
address_fields = {key: ', '.join(values) for key, values in address_fields.items()}
sql = "UPDATE GEOCODE_TBL SET PXVAL=?,PYVAL=?, intersection=?, political=?, country=? WHERE GEOCODE_ID=?"
params = (
address_fields['intersection'],
address_fields['political'],
address_fields['country'])
)
print(id_index,'updation done')
cursor.execute(sql, params)
id_index = id_index + 1
except Exception as e:
print('Expection ' ,id_index)
id_index = id_index + 1
pass
预计每列都会更新 lat 和 lng 有什么建议我在这里出错了,
谢谢。
这是示例 JSON 字符串
{
"results":[
{
"address_components":[
{
"long_name":"Nanabhai Moos Marg",
"short_name":"Nanabhai Moos Marg",
"types":[
"route"
]
},
{
"long_name":"Navy Nagar",
"short_name":"Navy Nagar",
"types":[
"political",
"sublocality",
"sublocality_level_2"
]
},
{
"long_name":"Colaba",
"short_name":"Colaba",
"types":[
"political",
"sublocality",
"sublocality_level_1"
]
},
{
"long_name":"Mumbai",
"short_name":"Mumbai",
"types":[
"locality",
"political"
]
},
{
"long_name":"Mumbai",
"short_name":"Mumbai",
"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":"400005",
"short_name":"400005",
"types":[
"postal_code"
]
}
],
"formatted_address":"Nanabhai Moos Marg, Navy Nagar, Colaba, Mumbai, Maharashtra 400005, India",
"geometry":{
"bounds":{
"northeast":{
"lat":18.8947505,
"lng":72.80972229999999
},
"southwest":{
"lat":18.894101,
"lng":72.8084149
}
},
"location":{
"lat":18.8943079,
"lng":72.8090094
},
"location_type":"GEOMETRIC_CENTER",
"viewport":{
"northeast":{
"lat":18.8957747302915,
"lng":72.8104175802915
},
"southwest":{
"lat":18.8930767697085,
"lng":72.8077196197085
}
}
},
"place_id":"ChIJjdazXn_R5zsR__eePPSFcIs",
"types":[
"route"
]
},
{
"address_components":[
{
"long_name":"India",
"short_name":"IN",
"types":[
"country",
"political"
]
}
],
"formatted_address":"India",
"geometry":{
"bounds":{
"northeast":{
"lat":35.5087008,
"lng":97.39535869999999
},
"southwest":{
"lat":6.4626999,
"lng":68.1097
}
},
"location":{
"lat":20.593684,
"lng":78.96288
},
"location_type":"APPROXIMATE",
"viewport":{
"northeast":{
"lat":35.5087008,
"lng":97.39535869999999
},
"southwest":{
"lat":6.4626999,
"lng":68.1097
}
}
},
"place_id":"ChIJkbeSa_BfYzARphNChaFPjNc",
"types":[
"country",
"political"
]
}
],
"status":"OK"
}
最佳答案
您的错误是您试图从子对象访问 JSON 的父键。
在 item['results'][0]['geometry']['location']['lat']
行中,item
是对象之一在结果
列表中,但您将其视为根 JSON 字典。
使用 json_results['results'][0]...
应该可以解决问题。
注意:通常正确格式化 JSON 可以揭示代码中的错误,在编写解析器时始终使用格式化文档,以使其变得简单。
关于Python 无法更新 JSON 字符串的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46945922/