gpt4 book ai didi

javascript - 使用 JSON.parse reviver 混淆字段

转载 作者:搜寻专家 更新时间:2023-11-01 05:14:33 27 4
gpt4 key购买 nike

我试图用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com