如何对Google LatLng对象进行字符串化?

ste*_*wne 4 javascript json google-maps

我正在使用谷歌地图API并试图将一系列点数字串化,每个点都有纬度和经度.我想要做的是将数据字符串化并将其存储在数据库中,以便以后检索.问题是,由于谷歌地图存储和使用数据的方式,结果JSON.stringify有时是奇怪的随机.例如,有时数据如下所示:

[{"Na":35.99663,"Oa":-78.94982},
 {"Na":35.996370000000006,"Oa":-78.94914},
 {"Na":35.99595,"Oa":-78.94833000000001},...]
Run Code Online (Sandbox Code Playgroud)

有时完全相同的数据如下所示:

[{"Ia":35.99663,"Ja":-78.94982},
 {"Ia":35.996370000000006,"Ja":-78.94914},
 {"Ia":35.99595,"Ja":-78.94833000000001},...]
Run Code Online (Sandbox Code Playgroud)

事实上,我已经看到了十种不同的变化.当我将字符串化数据存储在数据库中并检索它时,这会导致很多问题,因为我从来不知道期望哪种格式.我想要做的是替换键,以便数据看起来更像这样:

[{"lat":35.99663,"lon":-78.94982},
 {"lat":35.996370000000006,"lon":-78.94914},
 {"lat":35.99595,"lon":-78.94833000000001},...]
Run Code Online (Sandbox Code Playgroud)

我已经编写了代码来弄清楚谷歌地图正在使用哪些随机字母.有了这些信息,我想用"lat"或"lon"替换那些随机字母的每一个出现.我希望使用像这样的替换方法......

function formatData(data) {
    //data is an object that I want to stringify

    //this testPoint and testString help us figure out which letters google is using this time around
    var testPoint = new google.maps.LatLng(23,45);
    var testString = JSON.stringify(testPoint);
    var strangeLat = testString.substring(2,4); //this is a random two character string which represents latitude in the stringified data
    var strangeLon = testString.substring(10,12); //this is a random two character string which represents longitude in the stringified data

    //stringify the data and replace all occurences of the random letters with lat and lon
    var formattedData = JSON.stringify(data, function(key,value) {
        //do something here to replace the keys
    });

    return formattedData;     
}
Run Code Online (Sandbox Code Playgroud)

我知道如何用replacer函数替换值,但我无法弄清楚如何替换键.我四处搜索并在网上发现了一些类似的案例:JSON.stringify,更改了密钥的大小写,在javascript中替换了密钥JSON.但是,我无法理解它们,也无法提出满足我需求的解决方案.

在此先感谢您的任何帮助或建议!


更新!

谢谢大家.我能够结合您的建议提出解决方案.这是它的样子:

function formatData(data) {
    //data is an array of many LatLng objects

    newData = [];

    for(var i = 0; i < data.length; i++) {
        var obj = new Object();
        obj['lat'] = data[i].lat();
        obj['lon'] = data[i].lng();
        newData.push(obj);
    }

    return JSON.stringify(newData);     
}
Run Code Online (Sandbox Code Playgroud)

Baz*_*nga 8

JSON.stringify并不是很奇怪..谷歌地图api用随机密钥发出他们的json,但你不能使用他们的密钥.

如果你需要获得纬度和经度,你需要使用他们的API相同..

你需要使用这些方法

 lat() and lng() //refer: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng
Run Code Online (Sandbox Code Playgroud)

因为你在这里处理点你没有使用Points API,在这种情况下,lat/lng是属性..

参考:HTTP://code.google.com/apis/maps/documentation/javascript/reference.html#Point

如果你还想继续使用stringify:

JSON.stringify({lat: testPoint.y , lon: testPoint.x);
Run Code Online (Sandbox Code Playgroud)