Um auf der Antwort von stewe aufzubauen, erhalten Sie mit dem Closure Compiler mit aktiviertem Advanced ein Skript, das den globalen Namespace mit einer Reihe von Ein-Buchstaben-Variablen verschmutzt. Also verpacke ich es einfach in einen anonymen Funktionsaufruf wie folgt:
(function() {
function g(a) {
var b = typeof a;
if ("object" == b)
if (a) {
if (a instanceof Array) return "array"
if (a instanceof Object) return b;
var c = Object.prototype.toString.call(a)
if ("[object Window]" == c) return "object"
if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array"
if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function"
} else return "null"
else if ("function" == b && "undefined" == typeof a.call) return "object"
return b
}
function h(a) {
a = "" + a;
if (/^\s*$/.test(a) ? 0 : /^[\],:{}\s\u2028\u2029]*$/.test(a.replace(/\\["\\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r\u2028\u2029\x00-\x08\x10-\x1f\x80-\x9f]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:[\s\u2028\u2029]*\[)+/g, ""))) try {
return eval("(" + a + ")")
} catch (b) {}
throw Error("Invalid JSON string: " + a)
}
function i(a, b) {
var c = []
j(new k(b), a, c)
return c.join("")
}
function k(a) {
this.a = a
}
function j(a, b, c) {
switch (typeof b) {
case "string":
l(b, c)
break;
case "number":
c.push(isFinite(b) && !isNaN(b) ? b : "null")
break;
case "boolean":
c.push(b)
break;
case "undefined":
c.push("null")
break;
case "object":
if (null == b) {
c.push("null")
break
}
if ("array" == g(b)) {
var f = b.length;
c.push("[")
for (var d = "", e = 0
c.push("]")
break
}
c.push("{")
f = ""
for (e in b) Object.prototype.hasOwnProperty.call(b, e) && (d = b[e], "function" != typeof d && (c.push(f), l(e, c), c.push(":"),
j(a, a.a ? a.a.call(b, e, d) : d, c), f = ","))
c.push("}")
break;
case "function":
break;
default:
throw Error("Unknown type: " + typeof b)
}
}
var m = {
'"': '\\"',
"\\": "\\\\",
"/": "\\/",
"\u0008": "\\b",
"\u000c": "\\f",
"\n": "\\n",
"\r": "\\r",
"\t": "\\t",
"\x0B": "\\u000b"
},
n = /\uffff/.test("\uffff") ? /[\\\"\x00-\x1f\x7f-\uffff]/g : /[\\\"\x00-\x1f\x7f-\xff]/g;
function l(a, b) {
b.push('"', a.replace(n, function(a) {
if (a in m) return m[a]
var b = a.charCodeAt(0),
d = "\\u"
16 > b ? d += "000" : 256 > b ? d += "00" : 4096 > b && (d += "0")
return m[a] = d + b.toString(16)
}), '"')
};
window.JSON || (window.JSON = {});
"function" !== typeof window.JSON.stringify && (window.JSON.stringify = i);
"function" !== typeof window.JSON.parse && (window.JSON.parse = h);
})();
Jetzt können Sie anrufen:
var JSONString = JSON.stringify({name: 'value'});