【问题标题】:Python Unable to update coordinates of JSON stringPython无法更新JSON字符串的坐标
【发布时间】:2017-10-26 04:35:05
【问题描述】:

我从 sql 表中获取 JSON 数据并对其进行解析,以便从中获取少量组件,但对于特定列,我无法做到这一点。 latlng 保持为 NULL,否则所有内容都会更新。

这里是sn-p

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

latlng 的每一列都会更新 任何我在这里出错的建议,

谢谢。

这里是示例 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"
}

【问题讨论】:

    标签: python json for-loop pyodbc reverse-geocoding


    【解决方案1】:

    您的错误是您试图从子对象访问 JSON 的父键。

    item['results'][0]['geometry']['location']['lat'] 行中,itemresults 列表中的对象之一,但您将其视为根JSON 字典。

    使用json_results['results'][0]... 应该可以解决问题。

    注意:通常正确格式化 JSON 可以揭示代码中的错误,在编写解析器时始终使用格式化的文档,以使其变得容易。

    【讨论】:

    • 没有,我改成address_fields[field_key].append(json_results['results'][0]['geometry']['location']['lng'])还是没有更新
    • 您是否查看过捕获时的异常消息是什么?如果您使用的是 Atom 或 VS Code,则可以调试,否则 print e.message 以首先了解问题发生在哪里。
    • 我正在使用 spyder 编辑器,它没有给出任何异常消息,它执行时没有任何警告或错误消息
    • 是的,这就是为什么在except Exception as e: 块中添加我上面提到的print 行。这就是异常的意义所在,它们可以帮助您除其他事情之外进行调试。此外,它没有引发任何错误并停止执行的原因是因为您已经使用 try... except! 处理了问题
    • 添加了except Exception as e:print (e.message)但仍然没有变化
    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多