我使用JSON将数据发送到websocket。有时,websocket会将许多消息作为一条接收,而event.data看起来像:

{"message1":"message1"}{"message2":"message2"}


所以我不能用JSON.Parse解析它。如何处理这个问题?

最佳答案

这是一个自动恢复JSON解析器的示例,可用于解析串联的json:



function *multiJson(str) {
    while (str) {
        try {
            yield JSON.parse(str);
            str = '';
        } catch(e) {
            var m = String(e).match(/position\s+(\d+)/);
            yield JSON.parse(str.slice(0, m[1]));
            str = str.slice(m[1]);
        }
    }
}

//

let test = '{"message1":"message1"}{"message2":{"nested":"hi}{there"}}"third"[4,5,6]';

for (let x of multiJson(test))
    console.log(x)





基本上,如果位置n上存在语法错误,它将尝试解析出n之前和之后的所有内容。

07-24 09:44
查看更多