0

"firstname": "John2"の無効なラベル エラーが発生します。json データを括弧に入れたのに、なぜこのエラーがまだ発生するのですか? コードが Java スクリプト ラベルと混同しているように、まだ何かが不足していますか?

    <script type="text/javascript">
        var data = "(" + {
  "firstname": "John1",
  "lastname": "Doe",
  "location": {
    "latitude": "48.4048403957642",
    "longitude": "2.68452644348145"
  }
}
{
  "firstname": "John2",
  "lastname": "Doe",
  "location": {
    "latitude": "48.4050236871384",
    "longitude": "2.68512690051361"
  }
}
{
  "firstname": "John3",
  "lastname": "Doe",
  "location": {
    "latitude": "48.4048403957642",
    "longitude": "2.68452644348145"
  }
}
+ ")" ;

      function initialize() {
        var center = new google.maps.LatLng(48.404840395764175, 2.6845264434814453);

        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 3,
          center: center,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        });

        var markers = [];
        for (var i = 0; i < data.length; i++) {
          var location = data[i];
          var latLng = new google.maps.LatLng(location.latitude,
              location.longitude);
          var marker = new google.maps.Marker({
            position: latLng
          });
          markers.push(marker);
        }
        var markerCluster = new MarkerClusterer(map, markers);
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
4

2 に答える 2

0

あなたには2つの問題があります(私が見つけることができます)。

まず、JSON ではなく JavaScript で作業しています。オブジェクトリテラルがあります。

"("and を")"完全に取り除きます。これらは、を使用して JSON を解析しようとしている場合に使用されますeval。JSON がありません。ある場合は、JSONオブジェクト (およびそのparseメソッド)を使用する必要がありますeval。現在、オブジェクトを文字列化しようとしています (これにより、 のようなものが得られますが"([Object object])"、まったく役に立ちません)。

次に、オブジェクトの配列を操作しようとしているように見えますが、オブジェクトを次々に配置しただけです。

オブジェクトを配列リテラル[とでラップします]

配列内の項目はコンマ ( ,) で区切ります。

エラー メッセージの理由は、JS エンジンがloop にラベルを付けようとしているような奇妙な解析状態を作成したためです。

于 2012-05-28T10:55:18.920 に答える
-1

JSON生成関数の方が使いやすいのではないですか?例えば:

function array2json(arr) {
var parts = [];
var is_list = (Object.prototype.toString.apply(arr) === '[object Array]');

for (var key in arr) {
    var value = arr[key];
    if(typeof value == "object") { //Custom handling for arrays
        if(is_list) parts.push(array2json(value)); /* :RECURSION: */
        else parts[key] = array2json(value); /* :RECURSION: */
    } else {
        var str = "";
        if(!is_list) str = '"' + key + '":';

        //Custom handling for multiple data types
        if(typeof value == "number") str += value; //Numbers
        else if(value === false) str += 'false'; //The booleans
        else if(value === true) str += 'true';
        else str += '"' + value + '"'; //All other things
        // :TODO: Is there any more datatype we should be in the lookout for? (Functions?)

        parts.push(str);
    }
}
var json = parts.join(",");

if(is_list) return '[' + json + ']';//Return numerical JSON
return '{' + json + '}';//Return associative JSON
}

(補足: このコードは自分で作成したものではありませんが、非常に便利です! )

以下を使用して JSON データを作成できます。

myJSON = array2json(['any data', {'even objects': 'can go in here'});

そして、次を使用して配列を取り戻すことができます:

var myArray = eval('(' + myJSON + ')');
于 2012-05-28T10:56:10.300 に答える