技术解析

JS 如何验证 JSON 字符串 合法 可执行 JSON.parse 不抛出异常?
0
2021-08-27 12:47:00
idczone
data = (typeof event.data === 'string') ? JSON.parse(event.data) :event.data;

如果 event.data 是个乱七八糟的东西会报。。


try catch 不就可以把异常吃掉了吗?

可以 catch 到,但是后面还是会进业务流程一样会报,有没有办法防患于未然(例如把后端祭天)

```js
function isJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
```

能吃掉往后跑,但是后面进业务流程对象没法用一样会报错,目标是在发现异常时给他个缺省值防止后面出事,类似 undefined || “”这种。。。

你都 catch 到了为啥还让这个有问题的数据进业务流程…,直接把这个有问题的丢了不行吗

如果你看到了异常,自然就知道后面的业务不应该继续了。
如果你还想继续,那差不多是厨房瓦斯爆炸之后你开始用瓦斯当米饭来炒菜的感觉。
不存在防患于未然的方法,因为用户可能会不小心踢了网线。

把后端祭天(确信

你的提问包含两个逻辑:合法,JSON.parse 可以解析。正确的顺序应当是:JSON.parse 可解析,合法。第一个逻辑直接 try catch,第二个逻辑需要校验解析后的 json 对象,校验如果觉得麻烦可以使用 json schema,这是很多牛逼的库都在使用的,如: webpack。

老哥,都检测出错误了,还往下走不是找不自在吗?

吞掉错误你会更后悔

这只能说明数据的源头就有问题,这种异常是不可恢复的,就不要想着 catch 以后能够恢复正常流程,catch 只是为了让你给用户一些友好提示或者回收一些资源

你的问题在于
不知道如何正确处理异常

而你却想消除异常
干掉提问题的人,问题就没有咯

使用正则表达式检测内容是否包在{}里面, 不能完全百分百'验证, 还得再加一层 try catch

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服