Programming/JavaScript/serialize()

From Skypher

Jump to: navigation, search

Main Page
├─▼Programming
│ ├─▼JavaScript
│ │ ├─▷JSSh
│ │ ├─○JavaScriptStringEncode()
│ │ ├─●serialize()
│ │ ├─○visualize()
│ │ ├─○stackDump()
│ │ ├─○errorHandler()
│ │ └─○Array extensions
│ ├─▷ASP
│ └─○Chimera code
└─▷Hacking

Contents


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.");
	}
}
Personal tools