2012-05-28 4 views
0

"firstname": "John2",에 대한 잘못된 레이블 오류가 발생합니다. json 데이터를 괄호 안에 넣었으므로 왜 아직도이 오류가 발생합니까? 나는 여전히 코드가 자바 스크립트 레이블과 혼동을 일으킬 정도로 부족한가요?레이블 json 레이블 대 자바 스크립트 레이블

<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> 
+0

이 짧은 [기사] (http://www.alsacreations.com/artic)을 참조하십시오. le/lire/1161-json-ajax-jquery-jsonp-getjson.html) jquery json 사용에 대해 'quentin'응답이 있습니다. –

답변

0

두 가지 문제점이 있습니다.

먼저 JSON이 아닌 JavaScript로 작업하고 있습니다. 당신은 객체 리터럴을 가지고 있습니다.

"("")"을 완전히 제거하십시오. 이들은 eval을 사용하여 JSON을 구문 분석하려는 경우에 사용됩니다. JSON이 없으므로 JSON 객체 (및 해당 parse 메소드)를 사용해야하며 그렇지 않은 경우 eval이 아니어야합니다. 현재, 객체를 문자열로 변환하려고 시도하고 있습니다 (어떤 문자도 사용하지 않을 것인데 "([Object object])" 같은 것을 제공 할 것입니다).

둘째, 개체 배열을 사용하여 작업하는 것처럼 보이지만 방금 배치 한 것입니다.

배열 리터럴 []으로 개체를 래핑하십시오.

배열의 항목을 쉼표 (,)로 구분하십시오.

오류 메시지가 나타나는 이유는 사용자가 JS 엔진과 관련하여 이상한 구문 분석 상태를 만들었 기 때문입니다. label a loop.

+0

당신의 요지를 이해하지만, 단순히 여기 에서처럼 Google지도를 만들려고 노력하고 있습니다. 이것이 그들이 그것을 한 방법입니까? http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/examples/simple_example.html – Efe

+0

왜 "하지만"? 내 포인트를 이해하면 코드를 수정하십시오. – Quentin

-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 + ')'); 
+0

객체가 동일한 스크립트에서 데이터 구조를 순환하기 때문에, 아니요. JSON 객체를 만드는 것이 전혀 도움이되지 않습니다. – Quentin

+0

'var myArray = eval ('('+ 'myJSON +') ');'? 2012 년에? 그건 ** 끔찍한 ** 충고입니다. 네이티브 JSON 객체 (json2.js와 같은 버그 보고서에 대해 잘 알려진 표준 라이브러리와 함께)를 사용하는 대신 JSON을 생성하기 위해 일부 복사/붙여 넣기 JS를 사용합니다. – Quentin

+0

여기에서 Json 데이터를 생성하려고하지 않습니다. . 이미 생성 된 json 데이터의 데이터를 사용하고 싶습니다. – Efe