我知道JSON输出格式为given by Google
但是,我有时会得到slightly different format。这来自results
gecoder.geocode({'address': address}, callback)
变量
"location": {
"Za": 37.3492097,
"$a": -122.03260190000003
},
...
"viewport": {
"aa": {
"b": 37.329901,
"f": 37.37543489999999
},
"ba": {
"b": -122.06526500000001,
"f": -121.99577999999997
}
}
注意位置,边界和视口下的键 - 它们与标准的不同。这对我来说是个问题,因为我需要将这个JSON通过一个AJAX调用和发送到我的服务器并解析它,我的解析器不能将“$ a”作为有效的密钥名称。
这是正常还是我错过了什么?
编辑:
我在云托管平台(salesforce.com)上。我们正在使用Javascript API v3。我能够从本地HTML文件复制此问题。
我现在想的可能是因为我背后是公司代理。以前有人面对这个吗?
答案 0 :(得分:0)
如果您只使用文档化的方法并获得未记录的响应,那就是一个错误。在Issues List中提出问题 - 如果存在一个始终产生错误响应的地址,则需要包含演示者地址。如果没有一致错误的地址,那么尽可能详细地说明。例如,如果请求重复得太近,是否会发生?
确保您还使用其他浏览器客户端进行测试,甚至可能使用其他计算机进行测试。您当前的浏览器或计算机可能会出现奇怪的情况,导致API出现异常。
我建议将此答案与问题编号一起评论以供将来参考。
答案 1 :(得分:0)
正如对错误报告和API文档的评论中所指出的,回调中的response
对象不是纯JSON。为了获得JSON对象,我需要自己创建一个,如下所示:
//assume status is ok
var bestResult = getBestResultFromJSON(results);
var bounds = {'northeast' : {'lat' : 0, 'lng' : 0}, 'southwest' : {'lat' : 0, 'lng' : 0}};
var location = {'lat' : 0, 'lng' : 0};
var viewport = {'northeast' : {'lat' : 0, 'lng' : 0}, 'southwest' : {'lat' : 0, 'lng' : 0}};
// bounds not always available (https://developers.google.com/maps/documentation/javascript/reference#GeocoderGeometry)
if(bestResult.geometry.hasOwnProperty(bounds)) {
bounds.southwest.lat = bestResult.geometry.bounds.getSouthWest().lat();
bounds.southwest.lng = bestResult.geometry.bounds.getSouthWest().lng();
bounds.northeast.lat = bestResult.geometry.bounds.getNorthEast().lat();
bounds.northeast.lng = bestResult.geometry.bounds.getNorthEast().lng();
}
else {
bounds = null;
}
viewport.southwest.lat = bestResult.geometry.viewport.getSouthWest().lat();
viewport.southwest.lng = bestResult.geometry.viewport.getSouthWest().lng();
viewport.northeast.lat = bestResult.geometry.viewport.getNorthEast().lat();
viewport.northeast.lng = bestResult.geometry.viewport.getNorthEast().lng();
location.lat = bestResult.geometry.location.lng();
location.lng = bestResult.geometry.location.lng();
var jsonResults = {'results' : [{'address_components' : bestResult.address_components,
'formatted_address': bestResult.formatted_address,
'geometry' : {'bounds' : bounds, 'location' : location, 'location_type' : bestResult.location_type, 'viewport' : viewport},
'types' : bestResult.types}], 'status' : status};