javascript - 如何为 JSON.stringify 添加全局替换器和为 JSON.parse 添加全局 reviver?
问题描述
同时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.stringify 使用你的替换器——你可以像这样覆盖标准函数:
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);
}
然后用解析器做类似的事情。如果你把它放在其他脚本运行之前 - 全局你的替换器将被应用。
推荐阅读
- mongodb - Talend Job 自杀
- python - 跨两个数据帧的多个条件计数
- c# - 是否可以使用 Fluent API 将主键设置为 NOT AUTOINCREMENT?
- android - model-viewer 允许在 iOS 中使用 AR 但在 Android、HTML CSS 中不允许
- pyspark - 将函数应用于 Pyspark 中的连接列会影响性能吗?
- angular - 角度 ssr 的 ERR_TOO_MANY_REDIRECTS 问题
- flutter - 飞镖列表的奇怪行为
- c - 关于 printf 函数在 C 中“使用 %d 输出浮点数”的问题
- php - PHP - 在实例之间共享大型(静态)数据(不使用 SQL)
- java - 谷歌秘密管理 API 和谷歌存储 API 不能与 Apache Spark 一起使用