在 json.stringify 中组合替换器和字段
combining replacer and fields in json.stringify
如何在使用 json.stringify 时同时使用 white-list 个字段和替换函数?
解释如何使用字段列表。
有过滤空值的答案:
基于我正在尝试的代码片段:
var fieldWhiteList=['','x1','x2','children'];
let x = {
'x1':0,
'x2':null,
'x3':"xyz",
'x4': null,
children: [
{ 'x1': 2, 'x3': 5},
{ 'x1': 3, 'x3': 6}
]
}
function replacer(key,value) {
if (value!==null) {
if (fieldWhiteList.includes(key))
return value;
}
}
console.log(JSON.stringify(x, replacer,2));
结果是:
{
"x1": 0,
"children": [
null,
null
]
}
这不是我所期望的。我本来希望 children 的 x1 值显示出来,而不是空值。
怎样才能达到预期的效果?
另见 jsfiddle
By adding some debug output to the fiddle
function replacer(key,value) {
if (value!==null) {
if (fieldWhiteList.includes(key))
return value;
}
console.log('ignoring '+key+'('+typeof (key)+')');
}
我得到了输出:
ignoring x2(string)
ignoring x3(string)
ignoring x4(string)
ignoring 0(string)
ignoring 1(string)
ignoring 2(string)
{
"x1": 0,
"children": [
null,
null,
null
]
}
这表明键可能是数组索引。在这种情况下,它们都是从 0 到 n 的字符串格式的数字,因此:
adding a regular expression to match numbers 修复了问题
function replacer(key,value) {
if (value!==null) {
if (fieldWhiteList.includes(key))
return value;
if (key.match('[0-9]+'))
return value;
}
console.log('ignoring '+key+'('+typeof (key)+')');
}
预期输出:
ignoring x2(string)
ignoring x4(string)
{
"x1": 0,
"x3": "xyz",
"children": [
{
"x1": 2,
"x3": 5
},
{
"x1": 3,
"x3": 6
},
{
"x1": 4,
"x3": 7
}
]
}
如何在使用 json.stringify 时同时使用 white-list 个字段和替换函数?
解释如何使用字段列表。
有过滤空值的答案:
基于我正在尝试的代码片段:
var fieldWhiteList=['','x1','x2','children'];
let x = {
'x1':0,
'x2':null,
'x3':"xyz",
'x4': null,
children: [
{ 'x1': 2, 'x3': 5},
{ 'x1': 3, 'x3': 6}
]
}
function replacer(key,value) {
if (value!==null) {
if (fieldWhiteList.includes(key))
return value;
}
}
console.log(JSON.stringify(x, replacer,2));
结果是:
{
"x1": 0,
"children": [
null,
null
]
}
这不是我所期望的。我本来希望 children 的 x1 值显示出来,而不是空值。
怎样才能达到预期的效果?
另见 jsfiddle
By adding some debug output to the fiddle
function replacer(key,value) {
if (value!==null) {
if (fieldWhiteList.includes(key))
return value;
}
console.log('ignoring '+key+'('+typeof (key)+')');
}
我得到了输出:
ignoring x2(string)
ignoring x3(string)
ignoring x4(string)
ignoring 0(string)
ignoring 1(string)
ignoring 2(string)
{
"x1": 0,
"children": [
null,
null,
null
]
}
这表明键可能是数组索引。在这种情况下,它们都是从 0 到 n 的字符串格式的数字,因此:
adding a regular expression to match numbers 修复了问题
function replacer(key,value) {
if (value!==null) {
if (fieldWhiteList.includes(key))
return value;
if (key.match('[0-9]+'))
return value;
}
console.log('ignoring '+key+'('+typeof (key)+')');
}
预期输出:
ignoring x2(string)
ignoring x4(string)
{
"x1": 0,
"x3": "xyz",
"children": [
{
"x1": 2,
"x3": 5
},
{
"x1": 3,
"x3": 6
},
{
"x1": 4,
"x3": 7
}
]
}