author | Alexandre Fayolle <alexandre.fayolle@logilab.fr> |
Tue, 06 Oct 2009 16:56:22 +0200 | |
branch | stable |
changeset 3563 | f1dbb9bf4da3 |
parent 0 | b97547f5f1fa |
permissions | -rw-r--r-- |
(function($){function toIntegersAtLease(n) {return n<10?'0'+n:n;} Date.prototype.toJSON=function(date) {return date.getUTCFullYear()+'-'+ toIntegersAtLease(date.getUTCMonth()+1)+'-'+ toIntegersAtLease(date.getUTCDate());};var escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'} $.quoteString=function(string) {if(escapeable.test(string)) {return'"'+string.replace(escapeable,function(a) {var c=meta[a];if(typeof c==='string'){return c;} c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16);})+'"'} return'"'+string+'"';} $.toJSON=function(o) {var type=typeof(o);if(type=="undefined") return"undefined";else if(type=="number"||type=="boolean") return o+"";else if(o===null) return"null";if(type=="string") {return $.quoteString(o);} if(type=="object"&&typeof o.toJSON=="function") return o.toJSON();if(type!="function"&&typeof(o.length)=="number") {var ret=[];for(var i=0;i<o.length;i++){ret.push($.toJSON(o[i]));} return"["+ret.join(", ")+"]";} if(type=="function"){throw new TypeError("Unable to convert object of type 'function' to json.");} ret=[];for(var k in o){var name;var type=typeof(k);if(type=="number") name='"'+k+'"';else if(type=="string") name=$.quoteString(k);else continue;val=$.toJSON(o[k]);if(typeof(val)!="string"){continue;} ret.push(name+": "+val);} return"{"+ret.join(", ")+"}";} $.evalJSON=function(src) {return eval("("+src+")");} $.secureEvalJSON=function(src) {var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,'@');filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']');filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,'');if(/^[\],:{}\s]*$/.test(filtered)) return eval("("+src+")");else throw new SyntaxError("Error parsing JSON, source is not valid.");}})(jQuery);