end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

JSON->js Object変換をjQueryに学ぶ

これまで、次のようにeval()でjson2jsしていましたが、どうやら、Closure Compiler でコード圧縮できないらしい。

var js_obj = eval( '('+ data_json +')' );

jQuery.parseJSON() (v.1.8.1)を読んでみたら、JSON.parse()非対応のブラウザの場合、「 return ( new Function( "return " + data ) )() 」でjson2jsしていた。

parseJSON: function( data ) {
   if ( !data || typeof data !== "string") {
        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 );
}

確かに