在前端,我使用"xhr"(onprogress)接收"分块"数据(json数组)
当块到达时会有延迟——一切都很好,这种情况很容易处理——我只记得响应长度和偏移量。
当超过1个"分块"响应同时到达,导致最终响应无法解析时,就会出现问题,因为它是不正确的json。
结构:
[array 1][array 2] ... [array N]
示例:[{"response": [{"itemId": 1}]}][{"response": [{"itemId": 2}]}]
问题:有办法解析它吗?我试着使用正则表达式——它一直工作得很好,直到在响应体中有了子数组。换言之,对于上述示例,它将失败。
它将匹配这个:
1) {"response": [{"itemId": 1}
2) {"response": [{"itemId": 2}
我正在寻找的输出(匹配):
1) {"response": [{"itemId": 1}]}
2) {"response": [{"itemId": 2}]}
这是我现在使用的正则表达式。
[(.*?)]/gi
有什么方法可以使用正则表达式来实现这一点,或者我需要不同的方法吗?提前感谢!
假设"source"是块可用的地方,您可以:
var source = '[{"response": [{"itemId": 1}]}][{"response": [{"itemId": 2}]}]';
var chunks = JSON.parse('[' + source.replace(/][/g, '],[') + ']');
for (var i in chunks) {
// then work with chunks[i]...
}