jQuery.parseJSON 대 JSON.parse


79

jQuery.parseJSONJSON.parse같은 작업을 수행하는 두 가지 기능은 다음과 같습니다. jQuery 라이브러리가 이미로드 된 경우 성능면에서를 jQuery.parseJSON사용하는 것보다을 사용하는 것이 더 낫 JSON.parse습니까?

그렇다면 그 이유는 무엇입니까? 아니라면 왜 안됩니까?


1
JSON.parse는 이전 브라우저에서 사용할 수 없다고 생각합니다. 속도면에서 동일해야하고, JSON.parse는 조금 더 빨라야합니다 (jQuery는 최신 브라우저에서 JSON.parse를 사용한다고 생각합니다).

답변:


112

다음은 jQuery 1.9.1에서 발췌 한 것입니다 .

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

    if ( data === null ) {
        return data;
    }

    if ( typeof data === "string" ) {

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

        if ( 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 );
},

당신이 볼 수 있듯이, jQuery를 네이티브 사용 JSON.parse가능한 경우 방법을, 그렇지 않으면 그것은과 데이터 평가하려고합니다 new Function종류 등이다 eval.

네, 확실히 jQuery.parseJSON.


3
와, 좋은 답변입니다! 모두에게 감사합니다. 귀하의 답변이 가장 포괄적 인 답변이라고 생각합니다.
질문 오버플로

json의 출처에 따라 대체 'eval'방법에 보안 문제가있을 수 있습니다.
Steve Mayne

rvalidchars.test 항목은 잘못된 JSON을 포착해야합니다. 그래서 이것은 꽤 안전 해 보입니다.
Daniel

6
이것은 오래되었고 빈 문자열은 더 이상 null을 반환하지 않습니다. 대신 오류가 발생합니다.
mlissner 2013

3
예, jQuery와 같은 큰 라이브러리를 사용하는 것이 거의 불필요하다는 것을 나타 내기 위해이 답변을 업데이트해야한다고 생각합니다. 브라우저 채택을 보여주기 위해 몽상가 Joseph의 링크를보고 할 것입니다 JSON.parse. caniuse.com/#search=json
Hulvej

10

jQuery에 따르면

브라우저가 JSON.parse의 기본 구현을 제공하는 경우 jQuery는이를 사용하여 문자열을 구문 분석합니다.

따라서 브라우저에 기본 구현이없는 경우 jQuery가 JSON 파서를 제공함을 의미합니다. 다음 은 JSON 기능이 있거나없는 브라우저 의 비교 차트 입니다.


6

JSON.parse ()는 기본적으로 다른 브라우저가 아닌 일부 브라우저에서 사용할 수 있으므로 라이브러리를 사용하는 것이 더 안전합니다. 다른 응답자들이 언급했듯이 JQuery 구현은 잘 작동합니다. 도 있습니다 더글라스 크록 포드의 JSON 라이브러리 를 사용할 경우 기본 구현을 사용합니다.

JSON 라이브러리는 JavaScript 객체를 현재 jQuery에서 누락 된 JSON 문자열로 변환하는 방법이 있다는 장점이 있습니다.


Douglas Crockford의 JSON 라이브러리가 여전히 필요한 이유를 나타 내기 때문에 최고의 답변입니다.
Nathan Moinvaziri

6

jQuery 버전 3 (2016 년에 출시됨)을 사용하는 경우 가 deprecatedJSON.parse() 되었기 때문에 사용해야합니다 .jQuery.parseJSON()

jQuery 3.0부터 $ .parseJSON은 더 이상 사용되지 않습니다. JSON 객체를 구문 분석하려면 대신 기본 JSON.parse 메서드를 사용합니다.


3

성능에 대해서는 모르지만 ie7 이하와 같은 일부 브라우저에는 기본적으로 JSON 기능이 없을 수 있으므로 jQuery 메서드를 사용하는 것이 확실히 더 안전합니다. 반복을 위해
배열의 기본 forEach메서드 대신 jQuery의 각 메서드를 사용하는 것처럼 호환성에 관한 것입니다 .


IE8을 지원하지 않기 때문에 항상 JSON.parse (date)를 사용하고 $ .parseJSON ()보다 적은 문자를 사용합니다 ^ _ ^ IE8의 경우 <!-[if lt IE 8]> <meta http- equiv = "Refresh"content = "0; url = / error-browser.html"> <! [endif]->
xicooc

2

성능 에 대해 말하면 가장 최근의 답변은 JSON.parse입니다.

기본 JSON 객체는 요즘 모든 브라우저 에서 지원 되므로 . 여기에서 지원 테이블을 볼 수 있습니다 : http://caniuse.com/#feat=jsonJSON.parse

GitHub의 JQuery 저장소에서이 별칭 모양을 검색 할 수도 있습니다. https://github.com/jquery/jquery/search?utf8=%E2%9C%93&q=parseJSON

또한, jQuery.parseJson되지 여기에 다른 답변에서 언급 한 바와 같이 3.0 이상 버전에.

아주 오래된 브라우저에 대한 지원을 제공하려는 경우 (일반적으로 권장하지 않음 ) 이전 JQuery 버전 + 인 경우에만 jQuery 버전을 사용해야합니다 .


1

jQuery는 내부적으로 JSON.parseJSON 파일을 구문 분석하는 데 사용하므로 대부분의 경우 차이가 없습니다.

그러나 일부 구형 브라우저는 JSON.parse기능을 지원하지 않습니다.jQuery.parseJSON jQuery가 자체 기능을 사용하여 JSON을 처리 할 수 ​​있으므로 하면 유용합니다.

노트:

jQuery.parseJSONjQuery 3.0에서 더 이상 사용되지 않으므로 기본 JSON.parse방법을 사용하십시오 .

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