首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
V2EX  ›  JavaScript

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

  •  
  •   TomatoYuyuko · 71 天前 · 1405 次点击
    这是一个创建于 71 天前的主题,其中的信息可能已经有所发展或是发生改变。
    data = (typeof event.data === 'string') ? JSON.parse(event.data) :event.data;
    
    

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

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

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

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

    干掉提问题的人,问题就没有咯
        14
    cweijan   71 天前
    使用正则表达式检测内容是否包在{}里面, 不能完全百分百'验证, 还得再加一层 try catch
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4310 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 32ms · UTC 09:12 · PVG 17:12 · LAX 02:12 · JFK 05:12
    ♥ Do have faith in what you're doing.