브라우저 네이티브 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.