2010-12-18 6 views
4

간단한 JSON 파일을 구문 분석하려고합니다. 저는 Javascript, JSON 및 jquery를 처음 사용했습니다. 나는 protovis를 사용하여 나중에 그것을 플롯 할 수 있도록 JSON 파일의 정보를 추출하고 싶습니다. 내 JSON은 잘 형성되어 있으며 JSON lint에 유효성을 검사합니다. jquery를 사용하여 JSON을 구문 분석

나는이처럼 JSON 객체의에서 responseText를 분석하여이를 달성하기 위해 노력하고있어 :

var json = $.getJSON("week_13.json").responseText; 
var week13 = $.parseJSON(json); 

을 week13 내가 액세스 할 수있는 일이 있다는 희망. 단지 참고로, 나는 나중에 변수를 사용할 수 있도록 변수에 액세스하고 싶으므로 $.getJSON 호출에서 콜백 함수를 사용하려고하지는 않습니다.

Chrome과 콘솔을 사용하여 현재 진행중인 작업을 파악하려고합니다. 이 코드에서 변수 json은 빈 문자열로 보입니다. 그러나, 나는 크롬에서 자바 스크립트 콘솔에서 작성하는 경우 :

var json = $.getJSON("week_13.json"); 

jsonXMLHttpRequest 객체이며, 그 responseText 속성은 내 JSON을 포함하는 큰 문자열입니다.

var text = json.responseText; 

좋은 문자열 후 내가 jQuery의 파서

var data = $.parseJSON(text); 

를 호출하는 경우는 data 내가 원하는 개체가 지금이다. 그러나 나는 콘솔에 내 원래 두 줄을 복사하여 붙여 넣을 경우, 나는 운이 없다, 나는 내 원래의 웹 페이지에서 json, textdata 변수를 포밍 확장 버전을 사용하는 경우 작동하지 않습니다 :

var json = $.getJSON("week_13.json"); 
var text = json.responseText; 
var data = $.parseJSON(json); 

이 경우 text은 빈 문자열입니다.

나는 완전히 혼란 스럽다. 누구나 내가 잘못하고있는 것을 내게 알려주고이 일을하는 방법에 대한 조언을 주면, 나는 매우 행복 할 것이다! 이 질문에 답하는 방법에 대한 다른 정보가 필요한지 알려주십시오.

+0

당신이 불을 지르고 순 패널을 사용하여 불을 지르고를 사용하여 볼 수있는, 몇 번 당신이 JSON을 가지고 [0] 또는 등 .... – kobe

답변

8

$.getJSON()은 비동기입니다. 결과를 처리하려면 콜백 함수를 제공해야합니다. 콜백 함수의 예는 API doc을 참조하십시오. 당신이 정말로 동기로 전화를해야하는 경우

(당신은 결과를 기다리는 동안은 브라우저를 차단합니다), 당신은 대신이 작업을 수행 할 수 있습니다

var url = "week_13.json" 
var data = jQuery.parseJSON(
     jQuery.ajax({ 
      url: url, 
      async: false, 
      dataType: 'json' 
     }).responseText 
    ); 
+1

브릴리언트! 그래서 내 페이지가 작동하지 않는 이유는 ajax 호출이 끝나지 않았기 때문입니다. 파서가 호출 될 때 json 객체는 비어 있습니다. 반면 콘솔에서 수행하는 경우, 다음 줄을 입력 할 때까지 아약스 호출이 완료되었습니다. 정말 고마워! –

+0

정확합니다. 기꺼이 도와 드리겠습니다. 내 대답 옆에있는 체크 표시를 잊지 마세요 :-) –

+0

+1 for parseJSON –

0

$ .getJSON에 필요하지 않은를 전체 매개 변수를 사용할 때 parseJSON을 호출합니다. 나는 그것을 다음과 같이 사용한다.

$ .getJSON은 이미 responseText를 JSON 객체로 구문 분석한다.

+0

그러나 json_object 변수를 "out of"콜백 함수에서 얻으려면 어떻게해야합니까? 지금은 콜백 함수의 범위에 갇혀있는 것 같아요, 내 프로그램의 다른 곳에서 JSON 객체의 데이터를 사용하는 방법을 알지 못합니다. (플롯하려고합니다.) –

0

$.getJSON 함수는 기본적으로 모든 호출을 asynchronously으로 만듭니다. 따라서이 함수는 아무 것도 반환하지 않습니다. 이 함수의 매개 변수는 callback이며 콜백 함수에 데이터를 반환합니다. 아래 예제를 참조하십시오.

getJSON을 호출하기 전에 모든 기능을 중지하고 콜백에 데이터를 수신하면 작업을 다시 시작하여 프로그램 흐름을 동기화하는 다른 문제를 해결할 수 있습니다.

또한 글로벌 변수를 사용하여 json을 잡고 프로그램의 아무 곳에서나 사용할 수 있습니다. 데이터가 돌아 오는 방법

var json = null; // the global variable to store json returned from file 

// stop all your work here. 
// I mean do not perform any more actions here. 

// make an ajax call to get the json data 
$.getJSON('week_13.json', function (jsonData) { 

    // assign the data to global json variable. 
    json = jsonData; 


    // now call your other function to manipulate json 
    // now resume your work here, 
    // and perform other actions which are dependent on json. 

}); 
관련 문제