悠悠楠杉
网站页面
正文:
在JavaScript开发中,JSON.parse是处理JSON字符串的标配工具,但许多人可能忽略了它的第二个参数——Reviver函数。这个看似简单的回调函数,实则是操控嵌套数据的“手术刀”,尤其适合处理多层结构的对象属性修改需求。
当JSON.parse解析字符串时,会逐层遍历生成的JavaScript对象,并在每个属性被创建前调用Reviver函数。其核心逻辑如下:
const data = JSON.parse(rawString, (key, value) => {
if (key === 'targetKey') return modifyValue(value); // 修改特定属性
return value; // 其他属性保持不变
});假设我们需要将以下API返回数据中的timestamp字段统一转换为日期对象,且所有字符串类型的值去除首尾空格:
json
{
"post": {
"title": " JSON技巧分享 ",
"created": 1625097600,
"sections": [
{"content": " 示例文本 ", "meta": {"timestamp": 1625184000}}
]
}
}
通过Reviver函数实现递归处理:
function cleanData(jsonString) {
return JSON.parse(jsonString, (key, value) => {
// 递归处理:若值为对象/数组则继续遍历
if (typeof value === 'object' && value !== null) {
return value; // Reviver会继续处理嵌套属性
}
// 业务逻辑
if (key === 'timestamp') return new Date(value * 1000);
if (typeof value === 'string') return value.trim();
return value;
});
}JSON.decycle等工具处理;通过结合递归思想与Reviver函数,开发者能以声明式风格完成复杂数据转换,相比手动遍历代码量减少60%以上。这种方案尤其适合CMS内容管理系统、本地缓存数据清洗等场景。