1

我一直在寻找jQuery.parseJSON在 JavaScript 中解析 json 以返回 JavaScript 对象的方法。我不能使用 jQuery,因为我构建的整个插件都是独立的 JS,并且到目前为止还没有使用 jQuery。JavaScript 中是否已经提供了这种类型的东西?

4

3 回答 3

1

使用本机 JSON 对象(这是唯一一次说“JSON 对象”是正确的,它实际上是一个名为 的对象JSON)来操作 JSON 字符串。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/JSON

用于JSON.parse(yourJSONString);序列化和JSON.stringify(yourJSONObject);反序列化。

如果您查看第 492 行的jQuery 核心源代码jQuery.parseJSON,它只是JSON.parse.

于 2013-02-27T18:49:31.590 回答
0

您可以使用大多数浏览器都支持的本机 JSON 对象,但是当您尝试在 IE7 及更低版本的恐龙浏览器中使用它时会遇到问题。可以选择在此处包含一个模仿本机功能的独立插件(JSON.js)。

于 2013-02-27T18:57:08.410 回答
0

简短的回答:

使用浏览器原生方法JSON.parse()

window.JSON.parse(jsonString);

长答案:

要让它在旧浏览器中工作,您可以获取 jQuery 的 源代码并删除对 j​​Query 本身的jQuery.parseJSON任何依赖项。这是一个工作的独立版本:

function standaloneParseJson ( 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;
    }

    var rvalidchars = /^[\],:{}\s]*$/;
    var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;
    var rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g;
    var rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g;

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

        // Make sure leading/trailing whitespace is removed (IE can't handle it)
        data = data.replace(/^\s+|\s+$/g, '');

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

    // Error code here
    //jQuery.error( "Invalid JSON: " + data );
}
于 2013-02-27T19:14:15.997 回答