我有一个带有方向渲染器json的数组,它们是字符串化的。
array[1].direction = '{\"routes\":[{\"bounds\":\"\....'
array[1].direction = '{\"routes\":[{\"bounds\":\"\....'
.
.
这就是我在地图上渲染这些json的方法。
for (var x=2; x<array.length; x++) {
renderDirections(array[x].direction);
}
function renderDirections(result){
var directionRenderer = new google.maps.DirectionsRenderer();
myDirections = JSON.parse(result, function(name, value){
if(/^LatLngPlaceHolder\(/.test(value)) {
var match = /LatLngPlaceHolder\(([^,]+),([^,]+)\)/.exec(value);
return new google.maps.LatLng(match[1], match[2]);
}
else{
return value;
}
});
directionRenderer.setMap(map);
directionRenderer.setDirections(myDirections);
directionRenderer.setOptions({suppressMarkers:true,preserveViewport:true});
}
执行此操作会在JSON.parse行中出现"Uncaught SyntaxError: Unexpected token \"
错误。
但是,如果我这样做:
for (var x=2; x<array.length; x++) {
var examplejson = '{\"routes\":[{\"bounds\":\"\....'; //note that its an example json which i logged from `array[x].direction`
renderDirections(examplejson);
}
它渲染了json。
答案 0 :(得分:2)
只有在要解析为对象的字符串中创建JSON时,才需要\
。从第一个例子中删除\
,你就会有更好的运气。
array[1].direction = {"routes":[{"bounds":"....
\
告诉解析器“不要将引号视为终结符,而是将其视为字符。”在引用的字符串之外,它只是不正确。
答案 1 :(得分:1)
您不必以这种方式创建方向对象。如果你正在构建一个动态json,那么你应该做这样的事情:
var array = [];
var obj = {
key: "value",
key2: "value2",
key3: 3
};
array.push(obj);
如果从服务器收到key和key2的值,则只需用包含该值的变量替换硬编码字符串即可。以上述方式编码对象也更容易维护。编写手动编码的json对象是可怕的。你永远不会知道编辑时会出现什么错误。 如果您需要序列化该数组以进行存储,您可以只使用JSON.stringify(array),这将返回一个json编码的字符串,您可以通过网络传输甚至存储在localStorage中。
根据我向您展示的方法,您根本不需要JSON.parse,因此您可以避免在循环中不必要地调用JSON.parse。如果你有不同的原因来创建json对象,就像你的方式一样,你应该在你的问题中说明。但不管怎样,你不应该这样做。