gpt4 book ai didi

javascript - 在 json.stringify 中组合替换器和字段

转载 作者:行者123 更新时间:2023-11-30 19:20:44 25 4
gpt4 key购买 nike

如何在使用 json.stringify 时同时使用字段白名单和替换函数?

解释如何使用字段列表。

有过滤空值的答案:https://stackoverflow.com/a/41116529/1497139

基于我正在尝试的代码片段:

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
]
}

这不是我所期望的。我本以为会显示子项的 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
}
]
}

关于javascript - 在 json.stringify 中组合替换器和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57511751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com