]> git.evergreen-ils.org Git - Evergreen.git/blob - OpenSRF/src/javascript/JSON.js
changed to fit fieldmapper stuff
[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                         debug("Casting object to class " + class_constructor + "\n");
8                         obj = eval("new " + class_constructor + "(obj)");
9                         debug("My Classname: " + obj.classname);
10                 }
11         } catch( E ) {
12                 alert( E + "\n");
13         } finally {
14                 return obj;
15         }
16 }
17
18 function JSON2js (json) {
19
20         json = String(json).replace( /\/\*--\s*S\w*?\s*?\s+\w+\s*--\*\//g, 'Cast(');
21         json = String(json).replace( /\/\*--\s*E\w*?\s*?\s+(\w+)\s*--\*\//g, ', "$1")');
22
23         debug("=======================\n" + json);
24
25         var obj;
26         if (json != '') {
27                 try {
28                         eval( 'obj = ' + json );
29                 } catch(E) {
30                         debug("Error building JSON object with string " + json );
31                         return null;
32                 }
33         }
34         return obj;
35 }
36
37
38 function js2JSON(arg) {
39         var i, o, u, v;
40
41         debug( "Running js2JSON on " + arg );
42
43         switch (typeof arg) {
44                 case 'object':
45
46                         if(arg) {
47
48                                 if (arg._isfieldmapper) {
49                                         return "/*--S acp*/" + js2JSON(arg.array) + "/*--E acp*/";
50
51                                 } else {
52
53                                         if (arg.constructor == Array) {
54                                                 o = '';
55                                                 for (i = 0; i < arg.length; ++i) {
56                                                         v = js2JSON(arg[i]);
57                                                         if (o) {
58                                                                 o += ',';
59                                                         }
60                                                         if (v !== u) {
61                                                                 o += v;
62                                                         } else {
63                                                                 o += 'null,';
64                                                         }
65                                                 }
66                                                 return '[' + o + ']';
67                                         } else if (typeof arg.toString != 'undefined') {
68                                                 o = '';
69                                                 for (i in arg) {
70                                                         v = js2JSON(arg[i]);
71                                                         if (v !== u) {
72                                                                 if (o) {
73                                                                         o += ',';
74                                                                 }
75                                                                 o += js2JSON(i) + ':' + v;
76                                                         }
77                                                 }
78                                                 var obj_start = '{';
79                                                 var obj_end = '}';
80                                                 try {
81                                                         if ( arg.class_name() ) {
82                                                                 obj_start = '/*--S ' + arg.class_name() + '--*/{';
83                                                                 obj_end   = '}/*--E ' + arg.class_name() + '--*/';
84                                                         }
85                                                 } catch( E ) {}
86                                                 o = obj_start + o + obj_end;
87                                                 return o;
88                                         } else {
89                                                 return;
90                                         }
91                                 }
92                         }
93                         return 'null';
94
95                 case 'unknown':
96                 case 'number':
97                         return arg;
98
99                 case 'undefined':
100                 case 'function':
101                         return u;
102
103                 case 'string':
104                 default:
105                         return '"' + String(arg).replace(/(["\\])/g, '\\$1') + '"';
106         }
107 }