Python sql 中的 JSON 字符串更新不当

Python Improper Update of JSON string in sql

我正在进行反向地理编码并更新结果 O/P(采用 JSON 格式)并使用 [=38 更新 sql table 列=] o/p,但无法按预期正确存储或更新它。

这是进行反向地理编码后更新的内容

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

this 实际上就是这样,

这是我使用的代码

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])dumpsloads 中的尾随 "s" 表示 "string"。