You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用JSON.parse的reviver函数保留值为undefined的属性?

解决JSON.parse reviver函数保留属性并设置指定值的问题

嘿,我之前也碰到过一模一样的需求,刚好可以给你详细说说怎么处理~

首先得明确核心规则:JSON.parse的reviver函数如果返回undefined(或者没返回值),对应的属性就会被从最终对象里移除。那要保留属性的话,关键就是别让reviver返回undefined,而是返回你想要保留的那个指定值就行。

举个实际例子

假设我们有这样一段JSON字符串:

{
  "username": "stephan_g",
  "email": "",
  "age": null,
  "bio": "none"
}

我们的需求是:把email、age、bio这些“空值”对应的属性保留,但统一替换成null(你也可以换成空字符串、"N/A"之类的,按需调整)。

原本的reviver可能会写成这样(会删掉这些属性):

const badReviver = (key, value) => {
  // 遇到空字符串、null、"none"就返回undefined,导致属性被删
  if (value === "" || value === null || value === "none") {
    return;
  }
  return value;
};

const result = JSON.parse(jsonStr, badReviver);
// 结果:{ username: "stephan_g" } 其他属性都没了

现在调整reviver,让它返回我们想要的替换值,而不是undefined:

const goodReviver = (key, value) => {
  if (value === "" || value === null || value === "none") {
    // 返回要保留的指定值,这里用null举例
    return null;
    // 要是想换成"N/A"就写 return "N/A";
  }
  // 其他正常值直接返回
  return value;
};

const result = JSON.parse(jsonStr, goodReviver);
// 结果:{ username: "stephan_g", email: null, age: null, bio: null }

注意要点

  • 如果你想保留属性,替换值必须是合法的JSON数据类型(null、字符串、数字、布尔值、对象、数组都可以),不能用undefined——因为一旦返回undefined,属性还是会被删掉。
  • reviver函数会递归处理所有嵌套的属性,包括数组元素,所以这个逻辑会自动应用到深层结构里。
  • 如果要处理顶层对象(也就是最后一次调用reviver时key是空字符串的情况),也要注意别返回undefined,否则整个反序列化结果会变成undefined。

内容的提问来源于stack exchange,提问作者Stephan G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:01:53