| /* |
| 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(",") + "}"; |
| }}; |
| |