如何使用 stringify 替换器更改嵌套的 JSON 值?
How to change nested JSON value using stringify replacer?
我使用 JSON.stringify(value, replacer)
来屏蔽 JSON 对象中的敏感数据。
const inputJsonObject =
{
"id": "uniqueId",
"value": "objectData",
"user": {
"password": "qwerty"
}
};
const hideDataMethod = JSON.stringify(inputJsonObject, (key, value) => {
const dataToHide = ['id', 'user.password'];
return dataToHide.indexOf(key) === -1 ? value : 'xxx';
});
console.log(hideDataMethod);
如何获得 user.password
值?上述解决方案适用于 id
但不适用于密码。
它不适用于 password
,因为您正在寻找一个名为 "user.password"
的 属性,但是有 none; 属性 的名字是 password
,而不是 user.password
。 (它是一个对象上的 属性 被另一个对象上的 user
属性 引用,但这与 属性 名称无关。)如果删除 user.
的一部分,它将起作用。请注意,这样做会从正在字符串化的对象图中的 all 个对象中删除 all id
和 password
属性:
const inputObject = {
"id": "uniqueId",
"value": "objectData",
"user": {
"password": "qwerty"
}
};
const dataToHide = ["id", "password"];
const json = JSON.stringify(inputObject, (key, value) => {
return dataToHide.indexOf(key) === -1 ? value : "xxx";
});
console.log(json);
(我还更改了几个具有误导性名称的变量的名称。)
但我会在 将其转换为 JSON 之前 对其进行清理,而不是在以下过程中进行清理:
const tmp = {
...inputObject,
id: "xxx",
user: {
...inputObject.user,
password: "xxx",
}
};
const json = JSON.stringify(tmp);
我使用 JSON.stringify(value, replacer)
来屏蔽 JSON 对象中的敏感数据。
const inputJsonObject =
{
"id": "uniqueId",
"value": "objectData",
"user": {
"password": "qwerty"
}
};
const hideDataMethod = JSON.stringify(inputJsonObject, (key, value) => {
const dataToHide = ['id', 'user.password'];
return dataToHide.indexOf(key) === -1 ? value : 'xxx';
});
console.log(hideDataMethod);
如何获得 user.password
值?上述解决方案适用于 id
但不适用于密码。
它不适用于 password
,因为您正在寻找一个名为 "user.password"
的 属性,但是有 none; 属性 的名字是 password
,而不是 user.password
。 (它是一个对象上的 属性 被另一个对象上的 user
属性 引用,但这与 属性 名称无关。)如果删除 user.
的一部分,它将起作用。请注意,这样做会从正在字符串化的对象图中的 all 个对象中删除 all id
和 password
属性:
const inputObject = {
"id": "uniqueId",
"value": "objectData",
"user": {
"password": "qwerty"
}
};
const dataToHide = ["id", "password"];
const json = JSON.stringify(inputObject, (key, value) => {
return dataToHide.indexOf(key) === -1 ? value : "xxx";
});
console.log(json);
(我还更改了几个具有误导性名称的变量的名称。)
但我会在 将其转换为 JSON 之前 对其进行清理,而不是在以下过程中进行清理:
const tmp = {
...inputObject,
id: "xxx",
user: {
...inputObject.user,
password: "xxx",
}
};
const json = JSON.stringify(tmp);