jQuery.parseJSON与JSON.parse


79

jQuery.parseJSONJSON.parse是执行相同任务的两个功能。如果已经加载了jQuery库,就性能而言,使用jQuery.parseJSON会比使用更好JSON.parse吗?

如果是,为什么?如果没有,为什么不呢?


1
我认为JSON.parse在旧的浏览器中不可用。就速度而言,它们应该是相同的,JSON.parse应该更快一些(我认为jQuery在较新的浏览器中使用JSON.parse)。

Answers:


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”方法可能存在安全问题。
史蒂夫·梅恩

rvalidchars.test内容应捕获无效的JSON;所以这看起来很安全。
丹尼尔(Daniel)

6
请注意,这是旧的,并且空字符串将不再返回null。相反,它将引发错误。
mlissner

3
是的,我认为这个答案应该更新为声明,几乎没有必要使用像jQuery这样的大库。Gonna报告梦想家约瑟夫(Joseph the Dreamer)的链接,以显示浏览器对JSON.parse以下内容的
Hulvej

10

根据jQuery

在浏览器提供JSON.parse的本机实现的地方,jQuery使用它来解析字符串。

因此,这意味着如果浏览器上不存在本机实现,则jQuery将提供JSON解析器。是具有(和不具有)JSON功能的浏览器的比较表


6

JSON.parse()在某些浏览器上本机可用,而在其他浏览器上不可用,因此使用库更安全。正如其他受访者指出的那样,JQuery实现效果很好。还有Douglas Crockford的JSON库,该使用本机实现(如果可用)。

JSON库的优势在于,它具有一种将JavaScript对象转换为JSON字符串的方法,目前jQuery中缺少该方法。


最佳答案,因为它表明了为什么仍然需要Douglas Crockford的JSON库。
内森·莫因瓦济里

6

如果您使用的是jQuery版本3(于2016年发布),则应使用,JSON.parse()因为它jQuery.parseJSON() 已被弃用

从jQuery 3.0开始,不推荐使用$ .parseJSON。要解析JSON对象,请改用本机JSON.parse方法。


3

我不了解性能,但是使用jQuery方法绝对更安全,因为某些浏览器(例如ie7和更低版本)可能本身没有任何JSON功能。
这与兼容性有关,就像您使用jQuery的each方法而不是数组的本机forEach方法进行迭代一样。


我一直使用JSON.parse(date),因为我从不支持IE8,而且字符数少于$ .parseJSON()^ _ ^对于IE8,让我们像这样使用<!-[如果lt IE 8]> <meta http- equiv =“刷新” content =“ 0; url = / error-browser.html”> <![endif]->
xicooc 2015年

2

关于性能最新的答案是JSON.parse

原生JSON对象支持每一个浏览器如今,这样的选择JSON.parse。您可以在此处查看支持表:http : //caniuse.com/#feat=json

您还可以在GitHub上的JQuery的存储库中搜索此别名外观:https : //github.com/jquery/jquery/search? utf8 =% E2%9C%93 & q =parseJSON

此外,如此处其他答案所提及,在版本3.0+上jQuery.parseJson弃用

如果您使用的是旧的JQuery版本,则仅应使用jQuery的版本+如果您想为非常老的浏览器提供支持(通常不建议这样做)。


1

jQuery内部用于JSON.parse解析JSON文件,因此在大多数情况下它没有任何区别。

但是某些较旧的浏览器不支持JSON.parse功能,在这种情况下使用jQuery.parseJSON是有益的,因为jQuery可以使用自己的功能处理JSON。

注意:

jQuery.parseJSON自jQuery 3.0起已弃用,因此请使用本机JSON.parse方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.