【问题标题】:How to change nested JSON value using stringify replacer?如何使用 stringify 替换器更改嵌套的 JSON 值?
【发布时间】:2021-10-20 02:10:32
【问题描述】:

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

【问题讨论】:

  • 为什么是 JSON?只需遍历对象并直接替换值。有很多问题可以解决如何做到这一点。
  • 这能回答你的问题吗? Dynamically change nested JSON
  • 因为密码是password 而不是user.password
  • 请注意,您所称的 inputJsonObject 不是 JSON,它只是一个对象。 JSON 是一种用于数据交换的文本表示法(More here.) 如果您正在处理 JavaScript 源代码,而不是处理 string,那么您就不是在处理 JSON。 (同样,hideDataMethod 不是方法,而是字符串。)

标签: javascript json object stringify


【解决方案1】:

它不适用于password,因为您正在寻找一个名为"user.password" 的属性,但没有;该属性的名称是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);

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 2016-06-08
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多