谷歌地图Javascript API v3返回不同的JSON?

时间:2012-04-19 09:56:58

标签: javascript json google-maps-api-3

我知道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文件复制此问题。 我现在想的可能是因为我背后是公司代理。以前有人面对这个吗?

2 个答案:

答案 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};