解析错误的 JSON

hom*_*boy 1 javascript jquery json websocket

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

{"message1":"message1"}{"message2":"message2"}
Run Code Online (Sandbox Code Playgroud)

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

geo*_*org 5

这是自动恢复 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)
Run Code Online (Sandbox Code Playgroud)

基本上,如果 position 有语法错误n,它会尝试解析它之前n和之后的所有内容。