]> git.evergreen-ils.org Git - Evergreen.git/blob - OpenSRF/src/javascript/JSON.js
more fixin
[Evergreen.git] / OpenSRF / src / javascript / JSON.js
1 // in case we run on an implimentation that doesn't have "undefined";
2 var undefined;
3
4 function Cast (obj, class_constructor) {
5         try {
6                 if (eval(class_constructor + '["_isfieldmapper"]')) {
7                         obj = eval("new " + class_constructor + "(obj)");
8                 }
9         } catch( E ) {
10                 alert( E + "\n");
11         } finally {
12                 return obj;
13         }
14 }
15
16 function JSON2js (json) {
17
18         json = String(json).replace( /\/\*--\s*S\w*?\s*?\s+\w+\s*--\*\//g, 'Cast(');
19         json = String(json).replace( /\/\*--\s*E\w*?\s*?\s+(\w+)\s*--\*\//g, ', "$1")');
20
21         var obj;
22         if (json != '') {
23                 try {
24                         eval( 'obj = ' + json );
25                 } catch(E) {
26                         debug("Error building JSON object with string " + E + "\nString:\n" + json );
27                         return null;
28                 }
29         }
30         return obj;
31 }
32
33
34 function object2Array(obj) {
35         var arr = new Array();
36         for( var i  = 0; i < obj.length; i++ ) {
37                 arr[i] = obj[i];
38         }
39         return arr;
40 }
41
42 function js2JSON(arg) {
43         var i, o, u, v;
44
45         switch (typeof arg) {
46                 case 'object':
47
48                         if(arg) {
49
50                                 if (arg._isfieldmapper) { /* magi-c-ast for fieldmapper objects */
51
52                                         var arr = new Array();
53                                         if( arg.array.constructor != Array ) {
54                                                 for( var i  = 0; i < arg.array.length; i++ ) {
55                                                         if(arg.array[i]._isfieldmapper) {
56                                                                 arr[i] = arg.array[i];
57                                                         } else if( typeof arg.array[i] != 'object' ) { 
58                                                                 arr[i] = arg.array[i];
59                                                         } else {
60                                                                 arr[i] = object2Array(arg.array[i]);            
61                                                         }
62                                                 }
63                                                 arg.array = arr;
64                                         }
65
66                                         return "/*--S " + arg.classname + " --*/" + js2JSON(arg.array) + "/*--E " + arg.classname + " --*/";
67
68                                 } else {
69
70                                         if (arg.constructor == Array) {
71                                                 o = '';
72                                                 for (i = 0; i < arg.length; ++i) {
73                                                         v = js2JSON(arg[i]);
74                                                         if (o) {
75                                                                 o += ',';
76                                                         }
77                                                         if (v !== u) {
78                                                                 o += v;
79                                                         } else {
80                                                                 o += 'null';
81                                                         }
82                                                 }
83                                                 return '[' + o + ']';
84
85                                         } else if (typeof arg.toString != 'undefined') {
86                                                 o = '';
87                                                 for (i in arg) {
88                                                         v = js2JSON(arg[i]);
89                                                         if (v !== u) {
90                                                                 if (o) {
91                                                                         o += ',';
92                                                                 }
93                                                                 o += js2JSON(i) + ':' + v;
94                                                         }
95                                                 }
96
97                                                 o = '{' + o + '}';
98                                                 return o;
99
100                                         } else {
101                                                 return;
102                                         }
103                                 }
104                         }
105                         return 'null';
106
107                 case 'unknown':
108                 case 'number':
109                         return arg;
110
111                 case 'undefined':
112                 case 'function':
113                         return u;
114
115                 case 'string':
116                 default:
117                         return '"' + String(arg).replace(/(["\\])/g, '\\$1') + '"';
118         }
119 }