谷歌地图对象的JSON.stringify

时间:2016-02-23 09:43:56

标签: javascript php json google-maps

我正在使用Google Map JS APIv3返回的DirectionsDisplay来获取某些位置的坐标。 DirectionsDisplay具有返回值(TextViewlat())的函数,但我需要将它们发送到由lng()序列化的PHP,因此我将值分配给新变量(JSON.stringifycLat):

cLon

var steps=directionsDisplay.getDirections().routes[0].legs[0].steps; for(var i=0;i<steps.length;i++){ steps[i].end_location.cLat = steps[i].end_location.lat(); steps[i].end_location.cLon = steps[i].end_location.lng(); } 按预期显示console.log(steps)cLat

cLon

但是,Object {steps: Array[8]} steps: Array[8] 0: Object distance: Object duration: Object encoded_lat_lngs: "..." end_location: _.L cLat: 64.49756909999999 //here cLon: 14.148118999999951 //here lat: function() lng: function() __proto__: _.L ... 会显示:

console.log(JSON.stringify(steps))

我做错了什么?

1 个答案:

答案 0 :(得分:3)

查看json2.js中的相关部分:

// If the value has a toJSON method, call it to obtain a replacement value.

    if (value && typeof value === 'object' &&
            typeof value.toJSON === 'function') {
        value = value.toJSON(key);
    }

start_locationend_location确实有方法toJSON,因此这些属性将设置为JSON.stringify()

中此函数的returnValue

一种选择是完全覆盖start_locationend_location

for(var i=0;i<steps.length;i++){
  steps[i].end_location=    {
                             clat:steps[i].end_location.lat(),
                             cllng:steps[i].end_location.lng()
                            };
  steps[i].start_location=  {
                             clat:steps[i].start_location.lat(),
                             clng:steps[i].start_location.lng()
                            };

  steps[i].end_location.cLon = steps[i].end_location.lng();
} 

但是没有必要这样做(当API需要再​​次访问这些属性时也可能存在问题。)

正如您在字符串化steps中看到的那样,它们已经包含了所需的信息(latlng),只需在PHP脚本中使用它们而不是自定义属性。