0

我知道Google 给出的 JSON 输出格式

但是,我有时会得到稍微不同的格式。这是来自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
          }
        }

注意位置、边界和视口下的键 - 它们与标准不同。这对我来说是个问题,因为我需要通过AJAX 调用将这个 JSON 发送到我的服务器并解析它,而我的解析器不能将“$a”作为有效的键名。

这是正常的还是我错过了什么?

编辑:我在云托管平台(salesforce.com)上。我们正在使用 Javascript API v3。我能够从本地 HTML 文件中复制此问题。 我现在想这可能是因为我支持公司代理。有人遇到过这个吗?

4

2 回答 2

0

如果您仅使用记录的方法并获得未记录的响应,那么这是一个错误。在问题列表中提交问题- 如果有一个始终产生错误响应的演示者地址,您将需要包含一个演示者地址。如果没有始终如一的错误地址,请提供尽可能多的详细信息。例如,重复的请求太靠近会发生这种情况吗?

确保您还使用不同的浏览器客户端进行测试,甚至可能使用不同的机器。您当前的浏览器或计算机中可能存在异常,导致 API 行为异常。

我建议用问题编号评论这个答案以供将来参考。

于 2012-04-19T13:51:46.340 回答
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};
于 2012-04-27T07:52:48.523 回答