首页 > 解决方案 > 如何使用 stringify 替换器更改嵌套的 JSON 值?

问题描述

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但不适用于密码。

标签: javascriptjsonobjectstringify

解决方案


它不起作用,password因为您正在寻找一个名为 的属性"user.password",但没有;该属性的名称是password,而不是user.password。(它是一个对象上的一个属性,它被user另一个对象上的属性引用,但这与属性名称无关。)如果您删除其中的user.一部分,它将起作用。请注意,这样做会从正在字符串化的对象图中的所有对象中删除所有 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);

推荐阅读