如何为JSON添加全局替换器.stringify和json.parse的全局恢复器?



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));

是否可以全局添加这样的replacerreviver?

如果我得到你的问题正确-如果你想使所有未来的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);
}

,然后对解析器执行类似的操作。如果你把它放在其他脚本全局运行之前,你的替换程序将被应用。

最新更新