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 function JSON2jsRaw(text) {
14 eval('obj = ' + text);
19 /* iterates over object, arrays, or fieldmapper objects */
20 function jsIterate( arg, callback ) {
21 if( arg && typeof arg == 'object' ) {
22 if( arg.constructor == Array ) {
23 for( var i = 0; i < arg.length; i++ )
26 } else if( arg.constructor == Object ) {
30 } else if( arg._isfieldmapper && arg.a ) {
31 for( var i = 0; i < arg.a.length; i++ )
38 /* removes the class/paylod wrapper objects */
39 function decodeJS(arg) {
41 if(arg == null) return null;
43 if( arg && typeof arg == 'object' &&
44 arg.constructor == Object &&
45 arg[JSON_CLASS_KEY] ) {
46 eval('arg = new ' + arg[JSON_CLASS_KEY] + '(arg[JSON_DATA_KEY])');
52 o[i] = decodeJS(o[i]);
58 o[i] = decodeJS(o[i]);
67 function jsClone(obj) {
68 if( obj == null ) return null;
69 if( typeof obj != 'object' ) return obj;
72 if (obj.constructor == Array) {
74 for( var i = 0; i < obj.length; i++ )
75 newobj[i] = jsClone(obj[i]);
77 } else if( obj.constructor == Object ) {
80 newobj[i] = jsClone(obj[i]);
82 } else if( obj._isfieldmapper && obj.a ) {
83 eval('newobj = new '+obj.classname + '();');
84 for( var i = 0; i < obj.a.length; i++ )
85 newobj.a[i] = jsClone(obj.a[i]);
92 /* adds the class/paylod wrapper objects */
93 function encodeJS(arg) {
94 if( arg == null ) return null;
95 if( typeof arg != 'object' ) return arg;
97 if( arg._isfieldmapper ) {
99 if(!arg.a) arg.a = [];
100 for( var i = 0; i < arg.a.length; i++ )
101 newarr[i] = encodeJS(arg.a[i]);
104 a[JSON_CLASS_KEY] = arg.classname;
105 a[JSON_DATA_KEY] = newarr;
111 if(arg.length != undefined) {
113 for( var i = 0; i < arg.length; i++ )
114 newobj.push(encodeJS(arg[i]));
120 newobj[i] = encodeJS(arg[i]);
124 /* turns a javascript object into a JSON string */
125 function js2JSON(arg) {
126 return js2JSONRaw(encodeJS(arg));
129 function js2JSONRaw(arg) {
136 switch (typeof arg) {
140 if (arg.constructor == Array) {
145 o += js2JSONRaw(obj[i]);
148 return '[' + o + ']';
150 } else if (typeof arg.toString != 'undefined') {
155 o = o + js2JSONRaw(i) + ':' + js2JSONRaw(obj[i]);
158 return '{' + o + '}';
164 case 'number': return arg;
168 s = s.replace(/\\/g, '\\\\');
169 s = s.replace(/"/g, '\\"');
170 s = s.replace(/\t/g, "\\t");
171 s = s.replace(/\n/g, "\\n");
172 s = s.replace(/\r/g, "\\r");
173 s = s.replace(/\f/g, "\\f");
174 return '"' + s + '"';
176 default: return 'null';
183 for( i = 0; i < c; i++ ) s += '\t';
187 function jsonPretty(str) {
191 for( var i = 0; i < str.length; i++ ) {
192 var c = str.charAt(i);
193 if( c == '{' || c == '[' ) {
194 s += c + '\n' + __tabs(++d);
195 } else if( c == '}' || c == ']' ) {
196 s += '\n' + __tabs(--d) + '\n';
197 if( str.charAt(i+1) == ',' ) {
198 s += '\n' + __tabs(d);
200 } else if( c == ',' ) {
201 s += ',\n' + __tabs(d);