我使用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
之前和之后的所有内容。