javascript - 解析json数组流

标签 javascript arrays json regex stream

在前端,我使用“xhr”(onprogress)接收“分块”数据(json 数组)

当 block 到达时它们之间有延迟 - 一切都很好,这种情况很容易处理 - 我只记得响应长度和偏移量。

当超过 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

有什么方法可以使用正则表达式来做到这一点,或者我需要不同的方法吗? 提前致谢!

最佳答案

假设“源”是 block 可用的地方,您可以:

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]...
}

关于javascript - 解析json数组流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244168/

相关文章:

javascript - 将数组的最后一个元素复制到不同的位置,然后从数组的末尾删除它

javascript - 如何从 ASP.NET 网站访问客户端计算机 USB 中的文本文件

Javascript |通过 JSON 的特定键值在 JSON 数组中搜索

c - 在不知道大小的情况下将数组从 C 传递到 Fortran?

java - 在Java中将一个数组与另一个数组循环

php - 在 jQuery 中检索 JSON 响应

ios - RestKit JSON 空值崩溃

c# - 配置 JSON.NET 以忽略 DataContract/DataMember 属性

javascript - 如何在 json 对象中读取阿拉伯语

javascript - 将 PHP 变量传递给 Javascript 不起作用