屏蔽节点中的敏感信息

时间:2016-11-08 13:10:48

标签: javascript json node.js typescript

我想屏蔽/隐藏json值而不是键。 例如: -

myObject = {"Name":"value1","Phoneno":"545454545445"}
Output should be like below:
myObject = {"key1":*****

***,"key2":*****}

请告诉我,我们如何在nodejs中做到这一点? 感谢。

3 个答案:

答案 0 :(得分:1)

也许你会发现库https://github.com/tcdl/json-masker很有用,它允许你这样做:

const mask = require('json-masker');
const myObject = {"Name": "value1", "Phoneno": "545454545445"};
const masked = mask(myObject); // will produce: 
                               // {"Name": "xxxxx*", "Phoneno": "************"}

答案 1 :(得分:0)

怎么样:

let myObject = { "Name": "value1", "Phoneno": "545454545445" };
let output = {};

function mask(value: string) {
    let maskedValue = "";
    for (let i = 0; i < value.length; i++) {
        maskedValue += "*";
    }

    return maskedValue;
}

Object.keys(myObject).forEach(key => {
    output[key] = mask(myObject[key]);
});

console.log(output); // Object {Name: "******", Phoneno: "************"}

code in playground

答案 2 :(得分:0)

以下策略使用for...in循环遍历对象,用一串星号替换所有属性值。

const myObject = {"Name": "value1", "Phoneno": "545454545445"};

const mask = obj => {
  const masked = {};
  for (let key in obj) masked[key] = "*****";
  return masked;
};

console.log("original:",    myObject );
console.log("masked:", mask(myObject));

如果您希望屏蔽的值为星号,但长度与原始值相同(而不是恒定长度),请将for...in循环更改为以下内容:for (let key in obj) masked[key] = "*".repeat(obj[key].length);

更新:屏蔽嵌套对象(甚至数组)

在评论中,您询问了嵌套对象中的掩码值。

为了处理嵌套对象,甚至是任何嵌套排列的对象和/或数组的组合,您可能需要递归。简而言之,如果当前值是原始值(例如字符串,数字,布尔值等),则将其替换为虚拟字符串,但如果当前值是对象本身(或数组),则重新 - 从一开始就将该值重新发送到屏蔽过程中。

以下示例显示了可能完成的一种方式。我使用jQuery来检测值是普通对象还是数组。在这个例子中,对象属性名称以“A”,“B”,“C”等结尾。数组被转换为对象,例如["foo", "bar"]将转换为{"0": "*****", "1": "*****"}

const myObject = {propA: "a", propB: {propBA: "ba", propBB: "bb"}, propC: ["c0", "c1"], propD: {propDA: "da", propDB: {propDBA: "dba", propDBB: "dbb"}, propDC: ["dc0", "dc1"]}, propE: ["e0", {propE1A: "e1a", propE1B: "e1b"}, ["e20", "e21"]]};

const mask = objOrArr => {
  const masked = {};
  for (let key in objOrArr) {
    const val = objOrArr[key];
    if ($.isPlainObject(val) || $.isArray(val)) {
      masked[key] = mask(val);
    } else {
      masked[key] = "*****";
    }
  }
  return masked;
};

console.log("original... ",    myObject );
console.log("masked... ", mask(myObject));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

相关问题