JS 如何验证 JSON 字符串 合法 可执行 JSON.parse 不抛出异常?

2019-08-05 19:28:04 +08:00
 TomatoYuyuko
data = (typeof event.data === 'string') ? JSON.parse(event.data) :event.data;

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

6868 次点击
所在节点    JavaScript
14 条回复
geelaw
2019-08-05 19:31:46 +08:00
try catch 不就可以把异常吃掉了吗?
TomatoYuyuko
2019-08-05 19:32:56 +08:00
可以 catch 到,但是后面还是会进业务流程一样会报,有没有办法防患于未然(例如把后端祭天)
hhacker
2019-08-05 19:34:52 +08:00
```js
function isJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
```
TomatoYuyuko
2019-08-05 19:35:28 +08:00
@geelaw #1 能吃掉往后跑,但是后面进业务流程对象没法用一样会报错,目标是在发现异常时给他个缺省值防止后面出事,类似 undefined || “”这种。。。
ochatokori
2019-08-05 19:36:43 +08:00
@TomatoYuyuko #2 你都 catch 到了为啥还让这个有问题的数据进业务流程…,直接把这个有问题的丢了不行吗
geelaw
2019-08-05 19:37:24 +08:00
@TomatoYuyuko #2 如果你看到了异常,自然就知道后面的业务不应该继续了。

如果你还想继续,那差不多是厨房瓦斯爆炸之后你开始用瓦斯当米饭来炒菜的感觉。

不存在防患于未然的方法,因为用户可能会不小心踢了网线。
azh7138m
2019-08-05 19:38:32 +08:00
把后端祭天(确信
mystorp
2019-08-05 19:43:23 +08:00
你的提问包含两个逻辑:合法,JSON.parse 可以解析。正确的顺序应当是:JSON.parse 可解析,合法。第一个逻辑直接 try catch,第二个逻辑需要校验解析后的 json 对象,校验如果觉得麻烦可以使用 json schema,这是很多牛逼的库都在使用的,如: webpack。
securityCoding
2019-08-05 19:44:50 +08:00
老哥,都检测出错误了,还往下走不是找不自在吗?
jaskle
2019-08-05 19:49:44 +08:00
吞掉错误你会更后悔
Sparetire
2019-08-05 19:53:52 +08:00
@TomatoYuyuko 这只能说明数据的源头就有问题,这种异常是不可恢复的,就不要想着 catch 以后能够恢复正常流程,catch 只是为了让你给用户一些友好提示或者回收一些资源
bumz
2019-08-05 20:58:52 +08:00
你的问题在于
不知道如何正确处理异常
bumz
2019-08-05 20:59:30 +08:00
而你却想消除异常

干掉提问题的人,问题就没有咯
cweijan
2019-08-06 09:32:30 +08:00
使用正则表达式检测内容是否包在{}里面, 不能完全百分百'验证, 还得再加一层 try catch

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/589298

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX