Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个JSON.parse reviver函数有什么问题?_Javascript_Json - Fatal编程技术网

Javascript 这个JSON.parse reviver函数有什么问题?

Javascript 这个JSON.parse reviver函数有什么问题?,javascript,json,Javascript,Json,我有以下资料: const白名单=['prop1','prop2','result']; 常量恢复器=(键,值)=>{ if(白名单,包括(关键)){ 返回值; }否则{ return undefined;//显式删除条目 } }; const theMightyJsonString='{“result”:{“prop1”:“问候”,“prop2”:“你好”,“prop3”:“WASSUP!!!!”}'; log(JSON.parse(theMightyJsonString)) console

我有以下资料:

const白名单=['prop1','prop2','result'];
常量恢复器=(键,值)=>{
if(白名单,包括(关键)){
返回值;
}否则{
return undefined;//显式删除条目
}
};
const theMightyJsonString='{“result”:{“prop1”:“问候”,“prop2”:“你好”,“prop3”:“WASSUP!!!!”}';
log(JSON.parse(theMightyJsonString))

console.log(JSON.parse(theMightyJsonString,reviver))
最后一次调用reviver时将使用一个空字符串作为键
,这允许您对最终对象应用转换(在您的情况下,您将其转换为
未定义的
)。如果为空字符串添加测试,则它将正常工作:

const白名单=['prop1','prop2','result'];
常量恢复器=(键,值)=>{
如果(白名单.包括(键)| |键==''){
返回值;
}否则{
return undefined;//显式删除条目
}
};
const theMightyJsonString='{“result”:{“prop1”:“问候”,“prop2”:“你好”,“prop3”:“WASSUP!!!!”}';
log(JSON.parse(theMightyJsonString,reviver))说明:

如果指定了
恢复程序
,则通过解析计算的值将在返回之前进行转换。具体而言,计算值及其所有属性(从最嵌套的属性开始,一直到原始值本身)分别通过
恢复器运行

“并继续到原始值本身”回答了您的问题。
JSON.parse()
使用键
'prop1'
'prop2'
'prop3'
及其关联值调用
还原程序
,然后使用键
'result'
及其值(对象)最后一次使用空字符串作为
,整个解析对象作为

文档还提供了问题的解决方案:

如果
恢复程序
仅转换某些值而不转换其他值,请确保按原样返回所有未转换的值,否则将从结果对象中删除这些值

您的代码应该如下所示:

const白名单=['prop1','prop2','result'];
常量恢复器=(键,值)=>{
如果(键==''| |白名单。包括(键)){
返回值;
}否则{
return undefined;//显式删除条目
}
};
const theMightyJsonString='{“result”:{“prop1”:“问候”,“prop2”:“你好”,“prop3”:“WASSUP!!!!”}';
log(JSON.parse(theMightyJsonString))

console.log(JSON.parse(theMightyJsonString,revivier))
顶级对象有一个空键(
未定义
可能?)
白名单。includes(未定义)
将为
false
。您正在将整个json obj传递到接收方,因此您将只接收一个带有键“results”的项目,该值是您的其余数据,与您的任何白名单值都不匹配。这是否回答了您的问题?我懂了。我以为最后一个对象被跳过了。实际上,在parse()抛出一个没有花括号的语法错误后,我只添加了周围的花括号来生成一个有效的JSON字符串。()感谢您的回答和代码片段的良好使用。