我正在进行反向地理编码并更新生成的 O/P(JSON 格式)并使用 json o/p 更新 sql 表列,但它无法按预期正确存储或更新它。
以下是执行反向地理编码后更新的内容
>pw
{'results': [{'address_components': [{'long_name': 'Nandanvan A Wing', 'short_name': 'Nandanvan A Wing', 'types': ['establishment', 'point_of_interest', 'premise']}, {'long_name': 'Shivaji Nagar Marg', 'short_name': 'Shivaji Nagar Marg', 'types': ['route']}, {'long_name': 'Vishnu Prasad Society', 'short_name': 'Vishnu Prasad Society', 'types': ['neighborhood', 'political']}, {'long_name': 'Navpada', 'short_name': 'Navpada', 'types': ['political', 'sublocality', 'sublocality_level_3']}, {'long_name': 'Parle Colony', 'short_name': 'Parle Colony', 'types': ['political', 'sublocality', 'sublocality_level_2']}, {'long_name': 'Vile ....72.8454698}}}, 'place_id': 'ChIJ1SbMGMrJ5zsRQd3_uFHHDN4', 'types': ['political', 'sublocality', 'sublocality_level_3']}], 'status': 'OK'}
但事实就是如此,
这是我使用的代码
import pyodbc
import urllib.request
import urllib.parse
import json
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=mydb;UID=test;PWD=test@321;autocommit=True')
cursor = cnxn.cursor()
cursor.execute("select R_GEOCODE_ID, SOURCE_PXVAL, SOURCE_PYVAL from MST_NHB_R_GEOCODE where R_GEOCODE_ID=675421")
ID=[]
px_val=[]
py_val=[]
for row in cursor.fetchall():
ID.append(row[0])
px_val.append(row[1])
py_val.append(row[2])
#
wp = urllib.request.urlopen("https://maps.googleapis.com/maps/api/geocode/json?latlng={0},{1}".format(row[1],row[2]))
pw=wp.read().decode('utf-8')
pw = json.loads(pw)
if(pw['status'] == 'OK'):
sql = 'exec [db_name].dbo.USP_GEO_UPDATE ?, ?'
values = (str(pw), row[0])
cursor.execute(sql, (values))
cnxn.commit()
cursor.close()
cnxn.close()
它将 JSON 完全转换为'
引号,而反向地理编码则在引号"
。对此的任何建议都将有所帮助。
谢谢。
当你执行pw = json.loads(pw)
时,你从JSON响应创建一个python字典对象。然后,当您对该对象调用str()
时,您将获得 Python 字典的字符串表示形式,而不是有效的 JSON。相反,请使用 json.dumps()
创建 JSON 格式的字符串。所以,values = (json.dumps(pw), row[0])
.dumps
和loads
中的尾随"s"表示"字符串"。