2011-09-23 3 views
2

일부 웹 사이트에서 작업 중이며 JSON을 사용 중입니다. 내 문제는 JSON.parse 메서드입니다. 간단한 배열을 보내고 배열에 값을 추가하는 데 사용합니다. 그리고 저는 우리가 쉼표를 사용하는 끝에 항상 여분의 요소를 얻습니다. 다음은 단순화 된 코드입니다.JSON의 끝에 추가 요소가있는 이유는 무엇입니까?

responseText = '["dummy1", "dummy2", "dummy3", "dummy4"]'; 
var clientList=[]; 
try { 
    JSON.parse(responseText, function(key, val){clientList.push(val)}); 
} catch (e) { 
    alert('no'); 
} 

alert(clientList.length); 

처음에는 IE가 작동하지 않습니다 (예외 발생).

두 번째 크롬 결과는 clientList가 5 개의 문자열 배열이고 마지막 요소는 ',,,'입니다.

거기에 왜 여분의 값이 있습니까? 마지막으로 어레이를 띄우지 않고도 제거 할 수 있습니까? IE의 문제점은 무엇입니까?

+0

무엇이 잘못되었는지를 알려주는데 "예외가 발생했습니다"란 무엇입니까? – Gabe

답변

4

이 작동합니다 :

responseText = '["dummy1", "dummy2", "dummy3", "dummy4"]'; 
var clientList=[]; 
try { 
    clientList = JSON.parse(responseText); 
} catch (e) { 
    alert('no'); 
} 

IE 브라우저의 기본값으로 JSON이 없습니다. json2와 같은 라이브러리가 필요합니다.

귀하의 질문에 관해서는, 그 콜백 함수는 실제로 당신의 객체를 변형시키지 않기 위해서입니다. 예를 들어 :

var transformed = 
JSON.parse('{"p": 5}', function(k, v) { if (k === "") return v; return v * 2; }); 
// transformed is { p: 10 } 

0

parse에서 다른 브라우저에서 JSON 사용에 차이가 있습니다. 한 가지 방법은 IAbstractDownvoteFactory가 말한 것을하는 것입니다. 또 다른 방법은 (내가 IE에서 테스트하지 않았더라도) 모든 브라우저에서 작업을해야 jQuery 라이브러리와

clientList = $.parseJSON(responseText); 

을 사용하는 것입니다.

관련 문제