2
client side js functions for encoding/decoding objects into linear strings
4
Copyright Andrew Tridgell 2005
5
released under the GNU GPL Version 3 or later
10
enc = encodeObject(obj);
11
obj = decodeObject(enc);
13
The encoded format of the object is a string that is safe to
16
Note that only data elements are encoded, not functions
19
function count_members(o) {
27
function encodeObject(o) {
28
var i, r = count_members(o) + ":";
32
r = r + "" + i + ":" + t + ":" + encodeObject(o[i]);
33
} else if (t == 'string') {
34
var s = encodeURIComponent(o[i]).replace(/%/g,'#');
35
r = r + "" + i + ":" + t + ":" + s + ":";
36
} else if (t == 'boolean' || t == 'number') {
37
r = r + "" + i + ":" + t + ":" + o[i] + ":";
38
} else if (t == 'undefined' || t == 'null') {
39
r = r + "" + i + ":" + t + ":";
40
} else if (t != 'function') {
41
alert("Unable to encode type " + t);
47
function decodeObjectArray(a) {
49
var i, count = a[a.i]; a.i++;
50
for (i=0;i<count;i++) {
51
var name = a[a.i]; a.i++;
52
var type = a[a.i]; a.i++;
54
if (type == 'object') {
55
o[name] = decodeObjectArray(a);
56
} else if (type == "string") {
57
value = decodeURIComponent(a[a.i].replace(/#/g,'%')); a.i++;
59
} else if (type == "boolean") {
60
value = a[a.i]; a.i++;
61
if (value == 'true') {
66
} else if (type == "undefined") {
68
} else if (type == "null") {
70
} else if (type == "number") {
71
value = a[a.i]; a.i++;
74
alert("Unable to delinearise type " + type);
80
function decodeObject(str) {
81
var a = str.split(':');
83
return decodeObjectArray(a);