| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | /* * jQuery JSON Plugin * version: 1.0 (2008-04-17) * * This document is licensed as free software under the terms of the * MIT License: http://www.opensource.org/licenses/mit-license.php * * Brantley Harris technically wrote this plugin, but it is based somewhat * on the JSON.org website's http://www.json.org/json2.js, which proclaims: * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that * I uphold.  I really just cleaned it up. * * It is also based heavily on MochiKit's serializeJSON, which is * copywrited 2005 by Bob Ippolito. */(function($) {    function toIntegersAtLease(n)    // Format integers to have at least two digits.    {        return n < 10 ? '0' + n : n;    }    Date.prototype.toJSON = function(date)    // Yes, it polutes the Date namespace, but we'll allow it here, as    // it's damned usefull.    {        return this.getUTCFullYear()   + '-' +             toIntegersAtLease(this.getUTCMonth()) + '-' +             toIntegersAtLease(this.getUTCDate());    };    var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g;    var meta = {    // table of character substitutions            '\b': '\\b',            '\t': '\\t',            '\n': '\\n',            '\f': '\\f',            '\r': '\\r',            '"' : '\\"',            '\\': '\\\\'        };    $.quoteString = function(string)    // Places quotes around a string, inteligently.    // If the string contains no control characters, no quote characters, and no    // backslash characters, then we can safely slap some quotes around it.    // Otherwise we must also replace the offending characters with safe escape    // sequences.    {        //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);            }) + '"';        //}        //else{        //    string = string.replace('\n','\\n');        //}        return '"' + string + '"';    };    $.toJSON = function(o, compact)    {        var type = typeof(o);        if (type == "undefined")            return "undefined";        else if (type == "number" || type == "boolean")            return o + "";        else if (o === null)            return "null";        // Is it a string?        if (type == "string")        {            var str = $.quoteString(o);            return str;        }        // Does it have a .toJSON function?        if (type == "object" && typeof o.toJSON == "function")            return o.toJSON(compact);        // Is it an array?        if (type != "function" && typeof(o.length) == "number")        {            var ret = [];            for (var i = 0; i < o.length; i++) {                ret.push( $.toJSON(o[i], compact) );            }            if (compact)                return "[" + ret.join(",") + "]";            else                return "[" + ret.join(", ") + "]";        }        // If it's a function, we have to warn somebody!        if (type == "function") {            throw new TypeError("Unable to convert object of type 'function' to json.");        }        // It's probably an object, then.        var ret = [];        for (var k in o) {            var name;            type = typeof(k);            if (type == "number")                name = '"' + k + '"';            else if (type == "string")                name = $.quoteString(k);            else                continue;  //skip non-string or number keys            var val = $.toJSON(o[k], compact);            if (typeof(val) != "string") {                // skip non-serializable values                continue;            }            if (compact)                ret.push(name + ":" + val);            else                ret.push(name + ": " + val);        }        return "{" + ret.join(", ") + "}";    };    $.compactJSON = function(o)    {        return $.toJSON(o, true);    };    $.evalJSON = function(src)    // Evals JSON that we know to be safe.    {        return eval("(" + src + ")");    };    $.secureEvalJSON = function(src)    // Evals JSON in a way that is *more* secure.    {        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);
 |