如何使用 json-masker 对其中包含“-”的字段屏蔽 json?

问题描述 投票:0回答:3

我的要求是在记录 JSON 的某些字段时屏蔽它们。我正在使用 node.js。我使用了node.js的json-masker库。在“白名单”参数中传递名称中带有“-”的属性的 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 ,因此我无法更改密钥名称

node.js json logging
3个回答
0
投票

正确的语法是

'$["attribute-name"]'
而不是
'$.attribute-name'

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


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":"*****"}


0
投票

const MaskData = require('./maskdata'); 此版本已弃用,请勿使用

© www.soinside.com 2019 - 2024. All rights reserved.