Subversion Repositories Applications.papyrus

Rev

Rev 1422 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        Copyright (c) 2004-2006, The Dojo Foundation
        All Rights Reserved.

        Licensed under the Academic Free License version 2.1 or above OR the
        modified BSD license. For more information on Dojo licensing, see:

                http://dojotoolkit.org/community/licensing.shtml
*/



dojo.provide("dojo.json");
dojo.require("dojo.lang.func");
dojo.require("dojo.string.extras");
dojo.require("dojo.AdapterRegistry");
dojo.json = {jsonRegistry:new dojo.AdapterRegistry(), register:function (name, check, wrap, override) {
        dojo.json.jsonRegistry.register(name, check, wrap, override);
}, evalJson:function (json) {
        try {
                return eval("(" + json + ")");
        }
        catch (e) {
                dojo.debug(e);
                return json;
        }
}, serialize:function (o) {
        var objtype = typeof (o);
        if (objtype == "undefined") {
                return "undefined";
        } else {
                if ((objtype == "number") || (objtype == "boolean")) {
                        return o + "";
                } else {
                        if (o === null) {
                                return "null";
                        }
                }
        }
        if (objtype == "string") {
                return dojo.string.escapeString(o);
        }
        var me = arguments.callee;
        var newObj;
        if (typeof (o.__json__) == "function") {
                newObj = o.__json__();
                if (o !== newObj) {
                        return me(newObj);
                }
        }
        if (typeof (o.json) == "function") {
                newObj = o.json();
                if (o !== newObj) {
                        return me(newObj);
                }
        }
        if (objtype != "function" && typeof (o.length) == "number") {
                var res = [];
                for (var i = 0; i < o.length; i++) {
                        var val = me(o[i]);
                        if (typeof (val) != "string") {
                                val = "undefined";
                        }
                        res.push(val);
                }
                return "[" + res.join(",") + "]";
        }
        try {
                window.o = o;
                newObj = dojo.json.jsonRegistry.match(o);
                return me(newObj);
        }
        catch (e) {
        }
        if (objtype == "function") {
                return null;
        }
        res = [];
        for (var k in o) {
                var useKey;
                if (typeof (k) == "number") {
                        useKey = "\"" + k + "\"";
                } else {
                        if (typeof (k) == "string") {
                                useKey = dojo.string.escapeString(k);
                        } else {
                                continue;
                        }
                }
                val = me(o[k]);
                if (typeof (val) != "string") {
                        continue;
                }
                res.push(useKey + ":" + val);
        }
        return "{" + res.join(",") + "}";
}};