[javascript] 안전하게 JSON 문자열을 객체로 바꾸기

JSON 데이터 문자열이 주어지면 어떻게 해당 문자열을 JavaScript 객체로 안전하게 바꿀 수 있습니까?

분명히 나는 ​​다음과 같이 안전하지 않게 이것을 할 수 있습니다 :

var obj = eval("(" + json + ')');

그러나 그것은 다른 코드를 포함하는 JSON 문자열에 취약하게 만듭니다. 단순히 평가하는 것은 매우 위험합니다.



답변

JSON.parse(jsonString) 최신 브라우저를 보장 할 수있는 한 순수한 JavaScript 방식입니다.


답변

jQuery 메소드는 더 이상 사용되지 않습니다. 대신이 방법을 사용하십시오.

let jsonObject = JSON.parse(jsonString);

더 이상 사용되지 않는 jQuery 기능을 사용한 원래 답변 :

jQuery를 사용하는 경우 다음을 사용하십시오.

jQuery.parseJSON( jsonString );

정확히 당신이 찾고있는 것입니다 (jQuery documentation 참조 ).


답변

이 답변은 IE <7에 대한 것이며 최신 브라우저의 경우 위의 Jonathan의 답변을 확인하십시오.

이 답변은 구식이며 위의 Jonathan의 답변 ( JSON.parse(jsonString))이 이제 가장 좋습니다 .

JSON.org 에는 JavaScript에 대한 네 가지 언어를 포함하여 여러 언어에 대한 JSON 파서가 있습니다. 나는 대부분의 사람들이 json2.js를 그들의 goto 구현으로 간주한다고 생각 합니다.


답변

JSON.parse () ” 의 간단한 코드 예제를 사용하십시오 .

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

그리고 반전 :

var str = JSON.stringify(arr);


답변

다른 방법에 대해서는 잘 모르겠지만 프로토 타입 (JSON 튜토리얼) 에서 수행하는 방법은 다음과 같습니다 .

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

evalJSON()인수로 true를 호출 하면 수신 문자열이 삭제됩니다.


답변

이것은 문제인 것 같습니다.

Ajax websocket 등을 통해 수신 된 입력은 문자열 형식이지만 입력 여부는 알아야합니다 JSON.parsable. 문제는 항상 프로그램을 통해 실행 JSON.parse하면 프로그램이 “성공적으로”계속 될 수 있지만 여전히 콘솔에 dreaded 오류가 표시되는 것 "Error: unexpected token 'x'"입니다.

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});


답변

jQuery를 사용하는 경우 다음 을 사용할 수도 있습니다.

$.getJSON(url, function(data) { });

그럼 당신은 같은 일을 할 수 있습니다

data.key1.something
data.key1.something_else

기타