如何使用 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 idpassword 属性:

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