브라우저 네이티브 JSON 지원 (window.JSON)


92

window.JSONObject 를 통해 안전하고 효율적으로 객체의 JSON 구문 분석 / 직렬화를 기본적으로 지원하는 일부 브라우저에 대한 참조를 보았지만 세부 정보를 얻기가 어렵습니다. 누구든지 올바른 방향을 가리킬 수 있습니까? 이 Object가 노출하는 메서드는 무엇입니까? 어떤 브라우저에서 지원됩니까?


8
JSON 구문 분석언제 사용할 수 있습니까?를 참조하십시오 . JSON 객체 를 기본적으로 지원하는 브라우저에 대한 정보는 .
outis dec

답변:


108

모든 최신 브라우저는 네이티브 JSON 인코딩 / 디코딩 (Internet Explorer 8+, Firefox 3.1+, Safari 4+ 및 Chrome 3+)을 지원합니다. 기본적으로 JSON.parse(str)JSON 문자열을 구문 분석하고 str객체를 반환하고 객체 JSON.stringify(obj)의 JSON 표현을 반환합니다 obj.

MDN 기사 에 대한 자세한 내용 .


지원이 광범위하지 않다는 것을 알고 있지만이 메서드를 사용하는 것이 문자열을 eval ()하는 것보다 훨씬 빠르고 안전해야하므로 가능한 곳에서 사용하고 싶습니다. 다른 브라우저의 지원에 대한 아이디어가 있습니까?
levik

17
아, 그리고 부수적으로, 절대로 eval () JSON 문자열을 사용하지 마십시오. 대신 사용 가능한 많은 JSON 구문 분석 라이브러리 중 하나를 사용하십시오.
Sasha Chedygov

1
@colbeerhey : 네, 제가 가장 자주 보는 것입니다. jQuery를 훔칠 수도 있습니다.
Sasha Chedygov

2
참고로 "NEVER eval () ..."이라고 말한 다음 json2가 널리 지원되는 라이브러리라고 언급하면 ​​eval을 사용하지만 먼저 정규식을 사용하여 문자열의 유효성을 검사합니다. 비교 가능한 성능으로 유효성을 검사하지 않는 파서가 있지만 이것은 문자열의 유효성을 검사하고 구문 분석하는 것보다 빠릅니다. json2.js는 그 보급성에 대해서만 여전히 최선의 선택 일 것입니다.
TheXenocide 2011

2
@TheXenocide : 좋은 지적이지만 작성자는 유효성 검사 코드에 상당한 시간을 보냈을 것이므로 eval()JSON 문자열 은 절대로 말하지 않습니다 .
Sasha Chedygov 2011

30

jQuery-1.7.1.js-555 라인 ...

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }

    // Make sure leading/trailing whitespace is removed (IE can't handle it)
    data = jQuery.trim( data );

    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( data );
    }

    // Make sure the incoming data is actual JSON
    // Logic borrowed from http://json.org/json2.js
    if ( rvalidchars.test( data.replace( rvalidescape, "@" )
        .replace( rvalidtokens, "]" )
        .replace( rvalidbraces, "")) ) {

        return ( new Function( "return " + data ) )();

    }
    jQuery.error( "Invalid JSON: " + data );
}





rvalidchars = /^[\],:{}\s]*$/,

rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,

rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,

rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,

4
좋은. jQuery를 사용하는 좋은 주장.
OneWorld 2012

11
기타) jQuery를 = 내부 모습에 인수와 같은
올가

13

json2.js 사용의 장점은 브라우저에 아직 파서가없는 경우에만 파서가 설치된다는 것입니다. 이전 브라우저와의 호환성을 유지할 수 있지만 가능한 경우 기본 JSON 구문 분석기 (더 안전하고 빠름)를 사용하십시오.

네이티브 JSON을 사용하는 브라우저 :

  • IE8 +
  • Firefox 3.1 이상
  • Safari 4.0.3 이상
  • Opera 10.5 이상

지.


10

[ musicfreak 댓글 확장 ]

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

var obj = jQuery.parseJSON(data)

내부적으로 브라우저가 .JSON.parse를 지원하는지 확인하고 (사용 가능한 경우) 네이티브 window.JSON.parse를 호출합니다.

그렇지 않은 경우 자체를 구문 분석합니다.


8

이 스레드를 사용하는 모든 사람의 이익을 위해-JSON 객체를 지원하는 최신 브라우저 목록은 여기를 참조하세요. . 간단한 일반적인 답변-2013 년 이후에 정말로 중요한 거의 모든 브라우저.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.