【问题标题】:jQuery.parseJSON vs JSON.parsejQuery.parseJSON 与 JSON.parse
【发布时间】:2012-05-08 21:20:21
【问题描述】:

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

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

【问题讨论】:

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

标签: javascript jquery


【解决方案1】:

According to jQuery

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

因此,如果浏览器上不存在本机实现,则 jQuery 提供 JSON 解析器。 here's a comparison chart 具有(或不具有)JSON 功能的浏览器

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我总是使用 JSON.parse(date) 因为我从不支持 IE8- 并且字符少于 $.parseJSON() ^_^ 对于 IE8- 让我们像这样使用
    【解决方案3】:

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

    【讨论】:

    • 哇,很好的答案!谢谢大家,我认为你的答案是最全面的。
    • 根据您的 json 的来源,备用 'eval' 方法可能存在安全问题。
    • rvalidchars.test 东西应该捕获无效的 JSON;所以这看起来很安全。
    • 请注意,这是旧的,空字符串将不再返回 null。相反,它会抛出一个错误。
    • 是的,我认为应该更新这个答案,说明几乎没有必要为此使用像 jQuery 这样的大型库。将报告梦想家约瑟夫的链接以显示浏览器采用 JSON.parse:caniuse.com/#search=json
    【解决方案4】:

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

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

    【讨论】:

    • 最佳答案,因为它说明了为什么 Douglas Crockford 的 JSON 库仍然是必要的。
    【解决方案5】:

    谈到性能最新答案是JSON.parse

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

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

    此外,jQuery.parseJson 在 3.0+ 版本中被弃用,正如此处其他答案所述。

    如果你是旧的 JQuery 版本 + 如果你想为非常旧的浏览器提供支持,你应该只使用 jQuery 的版本(通常,不推荐)。

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

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

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

        注意:

        jQuery.parseJSON 已从 jQuery 3.0 中弃用。所以请使用原生的 JSON.parse 方法。

        【讨论】:

          猜你喜欢
          • 2011-10-23
          • 1970-01-01
          • 2012-12-30
          • 2010-12-23
          • 2018-06-25
          • 1970-01-01
          • 2017-03-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多