[英]Parsing streaming JSON and handle “invalid” errors (with Oboe.js)
我有一個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有效。
如果發生這種情況,我在.fail
-event中捕獲的Oboe將引發錯誤。 在記錄了錯誤之后,我再次運行了整個Oboe函數,最終在大約50 .fail()
之后,流將完成,並且我將最終擁有整個JSON對象。
但這是一個不好的方法。 當前功能可以在已經流傳輸時顯示坐標,但是在smashIt()
函數的每次重新啟動時, .node()
event將提供JSON文件中的所有JSON節點,直到該點為止(自上次執行smashIt()
以來,大約增加了50-100。
我正在尋找的是一種處理無效JSON錯誤並讓Oboe .node()
方法等待(或更好的主意)直到JSON 有效的方法,而不必使用.fail
-approach; 因此,僅使用一個smashIt()
執行即可正確處理無效的JSON錯誤。
我希望Oboe.js能夠自行處理,但似乎不行。
為了獲得流,我能想到的最簡單的絕對方法是用XMLHTTPRequest輪詢JSON文件。
您將不得不處理不完整的JSON。 也許您可以輕松地檢測入口邊界並進行一些自定義解析以獲得部分數據。
一種改進是僅獲取文件的新部分。 您可以考慮使用HTTP Range
標頭或使用服務器端腳本,該腳本將從偏移量開始返回內容。
進一步的改進將是放棄XMLHTTPRequest輪詢模型,並使用WebSockets或ServerSentEvents實現推送模型。 您可以使用一個簡單的守護程序來執行此操作,該守護程序會定期讀取JSON文件,或者甚至可以編寫一個直接掛接到模擬器中的守護程序[軟件工程增強]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.