我试图用 JSON.parse 滥用 reviver 函数。
我基本上想让某些字段“空”。
如果我这样做:
var json_data = JSON.parse(j, function(key, value) {
if (key == "name") {
return value;
} else {
return null;
}
});
整个 json_data 对象最终为 null。事实上,无论我做什么 else,它都定义了 json_object 的值。
有趣的是,这按预期工作:
var json_data = JSON.parse(j, function(key, value) {
if (key == "name") {
return "name";
} else {
return value;
}
});
属性“name”现在的值为“name”。
有问题的 JSON:
var j = '{"uuid":"62cfb2ec-9e43-11e1-abf2-70cd60fffe0e","count":1,"name":"Marvin","date":"2012-05-13T14:06:45+10:00"}';
更新
我刚刚意识到我想做的事情的反面也有效,所以我可以使名称字段无效:
var json_data = JSON.parse(j, function(key, value) {
if (key == "name") {
return null;
} else {
return value;
}
});
最佳答案
通过一些实验,它看起来像是对函数进行了最终调用,其中键是一个空字符串,值是顶级对象:
> JSON.parse('{"hello": "world"}', function(k, v) { console.log(arguments); return v; })
["hello", "world"]
["", Object]
所以你可以使用:
var json_data = JSON.parse(j, function(key, value) {
if (key == "name" || key === "") {
return value;
} else {
return null;
}
});
现在,由于 ""
确实是一个有效的 JSON key ,要 100% 正确,最好使用类似的东西:
var json_data;
JSON.parse(j, function(key, value) {
if (key == "name") {
return value;
} else if (key === "") {
json_data = value;
return null;
} else {
return null;
}
});
但这可能有点偏执 ;)
关于javascript - 使用 JSON.parse reviver 混淆字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10595386/