浏览器本地JSON支持(window.JSON)如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

我已经看到了一些浏览器的引用,这些浏览器原生支持通过window.JSONObject 安全高效地解析/序列化对象的JSON ,但细节很难实现。任何人都可以指出正确的方向吗?这个Object暴露的方法是什么?它支持哪些浏览器?

提问于
用户回答回答于

所有现代浏览器都支持本地JSON编码/解码(Internet Explorer 8+,Firefox 3.1 +,Safari 4+和Chrome 3+)。基本上,JSON.parse(str)将解析JSON字符串str并返回一个对象,并JSON.stringify(obj)返回对象的JSON表示obj

关于MDN文章的更多细节。

用户回答回答于

jQuery-1.7.1.js - 555行...

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }

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

    // Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        return window.JSON.parse( 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 );
}





rvalidchars = /^[\],:{}\s]*$/,

rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,

rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,

rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,

扫码关注云+社区