为何undefined属性未被添加至对象?如何强制添加?
JSON序列化丢失undefined属性的原因与解决办法
为什么值为undefined的属性没出现在最终JSON里?
JSON本身的规范不支持undefined这个值,JSON.stringify()在处理对象时,会自动忽略值为undefined、函数或Symbol类型的属性。其实你代码里的object对象是包含那些undefined属性的,只是序列化后看不到——你可以直接console.log(object)验证这一点,控制台会显示所有属性,包括值为undefined的。
怎么强制把这些属性加入JSON?
给你几个实用的解决方法:
方法1:用JSON.stringify的replacer参数自定义序列化规则
通过替换函数把undefined转成JSON支持的null(或者你需要的其他值,比如字符串"undefined"):
let json = JSON.stringify(object, (key, value) => { return value === undefined ? null : value; });
方法2:构建对象时直接替换undefined为null
在给object赋值的时候,就把undefined换成null,后续序列化自然会保留属性:
let object = {}; Object.keys(this.graphQL.body).forEach((key) => { object[key] = this[key] ?? null; // 空值合并运算符,undefined时赋值为null }) let json = JSON.stringify(object);
方法3:用Object.fromEntries简化对象构建(ES6+环境可用)
更简洁的写法,一次性处理所有属性:
const object = Object.fromEntries( Object.keys(this.graphQL.body).map(key => [key, this[key] ?? null]) ); const json = JSON.stringify(object);
内容的提问来源于stack exchange,提问作者Richard Bridge
相关产品推荐
相关产品推荐

