0

我有一个带有方向渲染器 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});
    }

这样做会"Uncaught SyntaxError: Unexpected token \"在 JSON.parse 行出现错误。

但是,如果我这样做:

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。

4

2 回答 2

2

仅当\您在要解析为对象的字符串中创建 JSON 时才需要。从你的第一个例子中删除\,你会有更好的运气。

array[1].direction = {"routes":[{"bounds":"....

\告诉解析器“不要将引号视为终止符,而是将其视为字符” 。在带引号的字符串之外,它是不正确的。

于 2013-04-18T16:59:20.283 回答
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 对象,您可能应该在您的问题中说明这一点。但无论哪种方式,你都不应该这样做。

于 2013-04-18T17:36:31.703 回答