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])');
51 o[i] = decodeJS(o[i]);
59 function jsClone(obj) {
60 if( obj == null ) return null;
61 if( typeof obj != 'object' ) return obj;
64 if (obj.constructor == Array) {
66 for( var i = 0; i < obj.length; i++ )
67 newobj[i] = jsClone(obj[i]);
69 } else if( obj.constructor == Object ) {
72 newobj[i] = jsClone(obj[i]);
74 } else if( obj._isfieldmapper && obj.a ) {
75 eval('newobj = new '+obj.classname + '();');
76 for( var i = 0; i < obj.a.length; i++ )
77 newobj.a[i] = jsClone(obj.a[i]);
84 /* adds the class/paylod wrapper objects */
85 function encodeJS(arg) {
86 if( arg == null ) return null;
87 if( typeof arg != 'object' ) return arg;
89 if( arg._isfieldmapper ) {
91 if(!arg.a) arg.a = [];
92 for( var i = 0; i < arg.a.length; i++ )
93 newarr[i] = encodeJS(arg.a[i]);
96 a[JSON_CLASS_KEY] = arg.classname;
97 a[JSON_DATA_KEY] = newarr;
103 if(arg.length != undefined) {
105 for( var i = 0; i < arg.length; i++ )
106 newobj.push(encodeJS(arg[i]));
112 newobj[i] = encodeJS(arg[i]);
116 /* turns a javascript object into a JSON string */
117 function js2JSON(arg) {
118 return js2JSONRaw(encodeJS(arg));
121 function js2JSONRaw(arg) {
128 switch (typeof arg) {
132 if (arg.constructor == Array) {
137 o += js2JSONRaw(obj[i]);
140 return '[' + o + ']';
142 } else if (typeof arg.toString != 'undefined') {
147 o = o + js2JSONRaw(i) + ':' + js2JSONRaw(obj[i]);
150 return '{' + o + '}';
156 case 'number': return arg;
160 s = s.replace(/\\/g, '\\\\');
161 s = s.replace(/"/g, '\\"');
162 s = s.replace(/\t/g, "\\t");
163 s = s.replace(/\n/g, "\\n");
164 s = s.replace(/\r/g, "\\r");
165 s = s.replace(/\f/g, "\\f");
166 return '"' + s + '"';
168 default: return 'null';
175 for( i = 0; i < c; i++ ) s += '\t';
179 function jsonPretty(str) {
183 for( var i = 0; i < str.length; i++ ) {
184 var c = str.charAt(i);
185 if( c == '{' || c == '[' ) {
186 s += c + '\n' + __tabs(++d);
187 } else if( c == '}' || c == ']' ) {
188 s += '\n' + __tabs(--d) + '\n';
189 if( str.charAt(i+1) == ',' ) {
190 s += '\n' + __tabs(d);
192 } else if( c == ',' ) {
193 s += ',\n' + __tabs(d);