1 var JSON_CLASS_KEY = '__c';
2 var JSON_DATA_KEY = '__p';
6 function JSON_version() { return 'wrapper' }
8 function JSON2js(text) {
9 return decodeJS(JSON2jsRaw(text));
12 JSON2js.fallbackObjectifier = null;
14 function JSON2jsRaw(text) {
16 eval('obj = ' + text);
21 /* iterates over object, arrays, or fieldmapper objects */
22 function jsIterate( arg, callback ) {
23 if( arg && typeof arg == 'object' ) {
24 if( arg.constructor == Array ) {
25 for( var i = 0; i < arg.length; i++ )
28 } else if( arg.constructor == Object ) {
32 } else if( arg._isfieldmapper && arg.a ) {
33 for( var i = 0; i < arg.a.length; i++ )
40 /* removes the class/paylod wrapper objects */
41 function decodeJS(arg) {
43 if(arg == null) return null;
45 if( arg && typeof arg == 'object' &&
46 arg.constructor == Object &&
47 arg[JSON_CLASS_KEY] ) {
50 arg = eval('new ' + arg[JSON_CLASS_KEY] + '(arg[JSON_DATA_KEY])');
52 if (JSON2js.fallbackObjectifier)
53 arg = JSON2js.fallbackObjectifier(arg, JSON_CLASS_KEY, JSON_DATA_KEY );
61 o[i] = decodeJS(o[i]);
67 o[i] = decodeJS(o[i]);
76 function jsClone(obj) {
77 if( obj == null ) return null;
78 if( typeof obj != 'object' ) return obj;
81 if (obj.constructor == Array) {
83 for( var i = 0; i < obj.length; i++ )
84 newobj[i] = jsClone(obj[i]);
86 } else if( obj.constructor == Object ) {
89 newobj[i] = jsClone(obj[i]);
91 } else if( obj._isfieldmapper && obj.a ) {
92 eval('newobj = new '+obj.classname + '();');
93 for( var i = 0; i < obj.a.length; i++ )
94 newobj.a[i] = jsClone(obj.a[i]);
101 /* adds the class/paylod wrapper objects */
102 function encodeJS(arg) {
103 if( arg == null ) return null;
104 if( typeof arg != 'object' ) return arg;
106 if( arg._isfieldmapper ) {
108 if(!arg.a) arg.a = [];
109 for( var i = 0; i < arg.a.length; i++ )
110 newarr[i] = encodeJS(arg.a[i]);
113 a[JSON_CLASS_KEY] = arg.classname;
114 a[JSON_DATA_KEY] = newarr;
120 if(arg.length != undefined) {
122 for( var i = 0; i < arg.length; i++ )
123 newobj.push(encodeJS(arg[i]));
129 newobj[i] = encodeJS(arg[i]);
133 /* turns a javascript object into a JSON string */
134 function js2JSON(arg) {
135 return js2JSONRaw(encodeJS(arg));
138 function js2JSONRaw(arg) {
145 switch (typeof arg) {
149 if (arg.constructor == Array) {
154 o += js2JSONRaw(obj[i]);
157 return '[' + o + ']';
159 } else if (typeof arg.toString != 'undefined') {
164 o = o + js2JSONRaw(i) + ':' + js2JSONRaw(obj[i]);
167 return '{' + o + '}';
173 case 'number': return arg;
177 s = s.replace(/\\/g, '\\\\');
178 s = s.replace(/"/g, '\\"');
179 s = s.replace(/\t/g, "\\t");
180 s = s.replace(/\n/g, "\\n");
181 s = s.replace(/\r/g, "\\r");
182 s = s.replace(/\f/g, "\\f");
183 return '"' + s + '"';
186 return (arg) ? 'true' : 'false';
188 default: return 'null';
195 for( i = 0; i < c; i++ ) s += '\t';
199 function jsonPretty(str) {
203 for( var i = 0; i < str.length; i++ ) {
204 var c = str.charAt(i);
205 if( c == '{' || c == '[' ) {
206 s += c + '\n' + __tabs(++d);
207 } else if( c == '}' || c == ']' ) {
208 s += '\n' + __tabs(--d) + '\n';
209 if( str.charAt(i+1) == ',' ) {
210 s += '\n' + __tabs(d);
212 } else if( c == ',' ) {
213 s += ',\n' + __tabs(d);