Programming/JavaScript/serialize()
From Skypher
|
▼Main Page |
|
serialize
serialize is a JavaScript function that returns a string that can be executed as JavaScript to re-create a JavaScript object or literal. It does not work for all objects, as not all objects are serializable.
Example usage:
var x = [1,2,{a:"a", b:new Function()}]
serialize(x);
Return value:
[1,2,{"a":"a","b":eval("function anonymous() {\n\n}")}]
Requirements
See Also
The code
function serialize(xValue) {
switch (typeof(xValue)) {
case "undefined": return "void(0)";
case "boolean": return xValue.toString();
case "number": return xValue.toString();
case "string": return "\"" + JavaScriptStringEncode(xValue) + "\"";
case "function": return "eval(\"" + JavaScriptStringEncode(xValue.toString()) + "\")";
case "object":
if (xValue == null) return "null";
var bArray = true;
var asObjectValues = [], asArrayValues = [], iCounter = 0, iLength = null;
for (var i in xValue) {
if (bArray) switch (i) {
case "length":
// Part of an array but not stored, keep so we can check
// if the length is correct
break;
case iCounter.toString():
// Part of an array and stored, but he index must be sequential starting at 0.
iCounter++;
asArrayValues.push(serialize(xValue[i]));
break;
default:
// Not an array
bArray = false;
}
asObjectValues.push(serialize(i) + ":" + serialize(xValue[i]));
}
if (bArray) {
try {
bArray &= (xValue.length == iCounter);
} catch (e) {
bArray = false;
}
}
return (bArray ?
"[" + asArrayValues.join(",") + "]":
"{" + asObjectValues.join(",") + "}"
);
default:
throw new Error("Objects of type " + typeof(xValue) + " cannot be serialized.");
}
}
