我的要求是在记录它们时屏蔽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,因此无法更改密钥名称
答案 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":"*****"}