为何代码生成的内容不是JSON对象?JSON校验函数返回false
问题分析:JSON校验函数返回false的原因
嘿,我来帮你拆解下这个问题!先还原下你的场景:
你通过这段代码生成了一个错误对象:
const name = error.name || null; const time = new Date().toLocaleString(); const message = error.message || error.toString(); const errorToSend = { name, time, message }; return errorToSend;
然后调用这个自定义的JSON校验函数,结果返回了false:
IsJsonString(str) { try { JSON.parse(str); } catch (e) { return false; } return true; }
核心问题所在
这个问题的根源特别直接:你传给IsJsonString的是一个JavaScript对象(errorToSend),但这个函数的设计目的是校验JSON格式的字符串。
当你把JS对象直接丢给JSON.parse()时,函数会自动把对象转成字符串——结果就是"[object Object]",这完全不是有效的JSON格式,所以JSON.parse()会抛出异常,函数也就返回false了。
怎么解决?
如果你想用这个函数校验你的错误对象是否能被序列化为合法JSON,你需要先把对象转换成JSON字符串,再传给函数:
const jsonStr = JSON.stringify(errorToSend); const isValid = IsJsonString(jsonStr); // 现在会返回true啦
要是你其实是想判断这个值是不是一个合法的JS普通对象(而非JSON字符串),那这个函数就不适用了,可以换个判断逻辑:
function isPlainObject(obj) { return typeof obj === 'object' && obj !== null && Object.prototype.toString.call(obj) === '[object Object]'; }
内容的提问来源于stack exchange,提问作者Emenpy Nguyen
相关产品推荐
相关产品推荐

