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

1

そのように方向オブジェクトを作成する必要はありません。動的 json を構築している場合は、次のようにする必要があります。

var array = [];
var obj = {
   key: "value",
   key2: "value2",
   key3: 3
};
array.push(obj);

サーバーから key と key2 の値を受け取った場合、ハードコードされた文字列を値を含む変数に置き換えることができます。上記の方法でオブジェクトをコーディングすると、保守も容易になります。手動でエンコードされた json オブジェクトを作成するのは恐ろしいことです。それらを編集するときに、どのような間違いが忍び寄るかは決してわかりません。その配列をストレージ用にシリアル化する必要がある場合は、JSON.stringify(array) だけで、ネットワーク経由で送信したり、localStorage に保存したりできる json でエンコードされた文字列が返されます。

私が示したアプローチでは、JSON.parse はまったく必要ないので、不要なループで JSON.parse を呼び出す必要がなくなります。あなたのようにjsonオブジェクトを作成する別の理由がある場合は、おそらく質問にそれを記載する必要があります。しかし、いずれにせよ、それを行う必要はありません。

于 2013-04-18T17:36:31.703 に答える