我正在使用谷歌地图API并试图将一系列点数字串联,每个点都有纬度和经度。我想要做的是将数据字符串化并将其存储在数据库中,以便以后检索它。问题是,由于谷歌地图存储和使用数据的方式,JSON.stringify
的结果有时是奇怪的随机。例如,有时数据如下所示:
[{"Na":35.99663,"Oa":-78.94982},
{"Na":35.996370000000006,"Oa":-78.94914},
{"Na":35.99595,"Oa":-78.94833000000001},...]
有时完全相同的数据如下所示:
[{"Ia":35.99663,"Ja":-78.94982},
{"Ia":35.996370000000006,"Ja":-78.94914},
{"Ia":35.99595,"Ja":-78.94833000000001},...]
事实上,我已经看到了十种不同的变化。当我将字符串化数据存储在数据库中并检索它时,这会导致很多问题,因为我永远不知道期望哪种格式。我想要做的是更换密钥,以便数据看起来更像这样:
[{"lat":35.99663,"lon":-78.94982},
{"lat":35.996370000000006,"lon":-78.94914},
{"lat":35.99595,"lon":-78.94833000000001},...]
我已经编写了代码来确定谷歌地图正在使用哪些随机字母。有了这些信息,我想用“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;
}
我知道如何用replacer函数替换值,但我无法弄清楚如何替换键。我四处搜索并在网上发现了一些类似的案例:JSON.stringify, change the case of the key和Replace keys JSON in javascript。但是,我无法理解它们,也无法提出满足我需求的解决方案。
提前感谢您的任何帮助或建议!
谢谢大家。我能够结合您的建议提出解决方案。这是它的样子:
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);
}
答案 0 :(得分:8)
JSON.stringify并不是很奇怪..谷歌地图api用随机密钥发出他们的json,你不能不幸地使用他们的密钥..
如果你需要获得纬度和经度,你需要使用他们的API ..
您需要使用方法
lat() and lng() //refer: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng
因为你在这里处理点,所以你没有使用Points API,在这种情况下,lat / lng是属性..
参阅:HTTP://code.google.com/apis/maps/documentation/javascript/reference.html#Point
如果你还想继续使用stringify:
JSON.stringify({lat: testPoint.y , lon: testPoint.x);
答案 1 :(得分:1)
只需使用JSON.stringify({lat: testPoint.lat(), lon: testPoint.lon()})
。
答案 2 :(得分:1)
下面的方法可以做你想做的事情
var ar = [{"Ia":35.99663,"Ja":-78.94982},{"Ia":35.996370000000006,"Ja":-78.94914},{"Ia":35.99595,"Ja":-78.94833000000001}];
var newAr = [];
for(var i = 0; i < ar.length; i++)
{
var obj = new Object();
var u = 0;
for(var x in ar[i])
{
if(u == 0)
obj['lat'] = ar[i][x];
else
obj['lon'] = ar[i][x];
u++;
}
newAr.push(obj);
}
alert(newAr.toSource());
我做了什么: 我创造了新阵列 然后我循环了ar 然后我从ar中循环了对象属性 4.我已将属性值分配给新属性
就是这样