jQuery.parseJSON 与 JSON.parse

IT技术 javascript jquery
2021-01-15 11:49:41

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

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

6个回答

这是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.

哇,很棒的答案!谢谢大家,我认为你的答案是最全面的。
2021-03-20 11:49:41
是的,我认为应该更新此答案以说明几乎没有必要为此使用像 jQuery 这样的大型库。将报告梦想家约瑟夫的链接以显示浏览器采用JSON.parsecaniuse.com/#search=json
2021-03-22 11:49:41
请注意,这是旧的,空字符串将不再返回 null。相反,它会抛出错误。
2021-03-26 11:49:41
rvalidchars.test 内容应该捕获无效的 JSON;所以这看起来很安全。
2021-04-01 11:49:41
根据您的 json 来自何处,回退“eval”方法可能存在安全问题。
2021-04-03 11:49:41

根据 jQuery

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

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

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

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

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

JSON 库的优点是它有一种方法可以将 JavaScript 对象转换为 JSON 字符串,而目前 jQuery 缺少这种方法。

最佳答案,因为它表明了为什么 Douglas Crockford 的 JSON 库仍然是必要的。
2021-04-13 11:49:41

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

我总是使用 JSON.parse(date) 因为我从不支持 IE8- 并且字符少于 $.parseJSON() ^_^ 对于 IE8- 让我们像这样使用 <!--[if lt IE 8]><meta http- equiv="Refresh" content="0;url=/error-browser.html"><![endif]-->
2021-03-31 11:49:41