如何使用json-masker屏蔽其中带有“-”的字段的json?

时间:2018-10-18 03:46:21

标签: node.js json logging

我的要求是在记录它们时屏蔽JSON的某些字段。我正在研究node.js。我已经使用了node.js的json-masker库。在“ whitelist”参数的名称中传递带有“-”的属性的JSON路径时,出现词法错误。

JSON

   {  
   "attribute1":"value1",
   "attribute2":"value2",
   "attribute-name":"value3"
   }

代码

const masker = require('json-masker');
const mask= masker({
whitelist: ['$.attribute1','$.attribute-name']
});

错误

    Error Lexical error on line 1. Unrecognized text.
    $.attribute-name

此外,还有一种方法可以只指定需要屏蔽的属性,而不是指定不需要屏蔽的属性(如白名单中指定)。 请建议是否有使用其他功能/库的更好方法。

请注意,我收到此JSON,因此无法更改密钥名称

2 个答案:

答案 0 :(得分:0)

正确的语法是'$["attribute-name"]'而不是'$.attribute-name'

$字段由json-masker的依赖项jsonpath处理。在他们的一个github问题(#90)中讨论了此问题,并在那里提出了解决方案。

答案 1 :(得分:0)

使用maskdata npm模块:https://www.npmjs.com/package/maskdata

您可以毫不费力地屏蔽包含“-”的json字段。另外,您也可以掩盖嵌套字段。

示例:

const MaskData = require('./maskdata');

const maskJSONOptions = {
  // Character to mask the data. Default value is '*'
  maskWith : "*",

  // It should be an array
  // Field names to mask. Can give multiple fields.
  fields : ['level1.level2.level3.field3', 'level1.level2.field2', 'level1.field1', 'value1'] 
};

const nestedObject = {
  level1: {
    field1: "field1",
    level2: {
      field2: "field2",
      level3: {
        field3: "field3",
      }
    }
  },
  value1: "value"
};
const maskedObj = MaskData.maskJSONFields(nestedObject, defaultJSONMaskOptions2);

//Output : {"level1":{"field1":"******","level2":{"field2":"******","level3":{"field3":"******"}}},"value1":"*****"}