JSON.stringify
允许通过自定义replacer
,JSON.parse
允许通过自定义reviver
。这对于例如RegExp
类型非常有帮助,因为默认情况下它不能被反序列化:
var o = {
foo: "bar",
re: /foo/gi
};
function replacer(key, value) {
if (value instanceof RegExp)
return ("__REGEXP " + value.toString());
else
return value;
}
function reviver(key, value) {
if (value.toString().indexOf("__REGEXP ") == 0) {
var m = value.split("__REGEXP ")[1].match(//(.*)/(.*)?/);
return new RegExp(m[1], m[2] || "");
} else
return value;
}
console.log(JSON.parse(JSON.stringify(o, replacer, 2), reviver));
是否可以全局添加这样的replacer
和reviver
?
如果我得到你的问题正确-如果你想使所有未来的JSON。字符串化以使用您的替换器-您可以像这样覆盖标准函数:
JSON.stringify_original = JSON.stringify;
JSON.stringify = function(o, r, s){
r = function(key, value){
if (value instanceof RegExp)
return ("__REGEXP " + value.toString());
else
return value;
}
return JSON.stingify_original(o, r, s);
}
,然后对解析器执行类似的操作。如果你把它放在其他脚本全局运行之前,你的替换程序将被应用。