- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个不断附加的 JSON 文件,直到完成(它包含来自模拟的坐标;当该模拟运行时,每个时间帧的坐标都会附加到 JSON 文件中)。
在我的网页中,模拟开始后必须立即显示这些坐标。为此,我使用 Oboe.js一旦坐标出现在 JSON 文件中就显示坐标:
function smashIt(path){
oboe(path)
.node('frames.*', function( frame ){
animationFrames.push(frame);
})
.fail( function( errorReport ){
console.log(errorReport);
smashIt(path);
})
.done(function(finalObj){
finalObject = finalObj;
console.log(finalObj);
});
}
问题在于,由于在文件完全完成之前它基本上是一个 JSON 流,因此当 Oboe 函数到达已可用内容的末尾时,JSON 可能无效:它可能缺少 }
或逗号来使 JSON 有效。
如果发生这种情况,Oboe 将抛出一个错误,我在 .fail
事件中捕获该错误。记录错误后,我再次运行整个 Oboe 函数,最终在大约 50 个 .fail() 后,流将完成,我最终将获得整个 JSON 对象。
但这是一个糟糕的方法。当前功能可以在流式传输时显示坐标,但每次重新启动 smashIt()
函数时,.node()
事件将提供所有直到该点为止 JSON 文件中的 JSON 节点(自上次 smashIt()
执行以来,总会有大约 50-100 个节点。
我正在寻找的是一种处理无效 JSON 错误的方法,并让 Oboe .node()
-方法等待(或者更好的主意?),直到 JSON valid 而不必使用 .fail
方法;因此,仅使用一次 smashIt()
执行,即可正确处理无效的 JSON 错误。
我希望 Oboe.js 能够自行处理这个问题,但事实似乎并非如此。
最佳答案
要获得流式传输,我能想到的最简单的方法是使用 XMLHTTPRequest 轮询 JSON 文件。
您将不得不处理不完整的 JSON。也许您可以轻松检测条目边界并进行一些自定义解析以获取部分数据。
改进是仅获取文件的新部分。您可以考虑使用 HTTP Range
header 或使用服务器端脚本来返回从偏移量开始的内容。
进一步的改进是放弃 XMLHTTPRequest 轮询模型并使用 WebSockets 或 ServerSentEvents 来实现推送模型。您可以使用一个定期读取 JSON 文件的简单守护进程来完成此操作,或者您甚至可以编写一个直接 Hook 到模拟器的守护进程 [软件工程强化]。
关于javascript - 解析流式 JSON 并处理 "invalid"错误(使用 Oboe.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33018832/
我是一名优秀的程序员,十分优秀!