2015-10-08 3 views
0

У меня есть файл JSON, который добавляется непрерывно до его завершения (он содержит координаты из симуляции, в то время как эта симуляция работает, координаты каждого временные рамки добавляются в файл JSON).Анализ синтаксического разбора JSON и ошибок «недопустимых» (с Oboe.js)

На моей веб-странице эти координаты должны быть показаны, как только начнется симуляция. Для этого я использую 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, пока файл не будет полностью законченный, JSON может быть недействительным, когда функция Гоу достигла конца уже доступного содержимого: для его JSON может отсутствовать } или запятая.
Если это произойдет, ошибка будет вызываться гобой, которую я поймаю в .fail -эвенте. После регистрации ошибки я снова запустил всю функцию «Гобой», и, в конце концов, после того, как примерно 50 .fail() закончится, и в конечном итоге у меня будет весь объект JSON.

Но это плохой подход. Текущая функциональность работает, чтобы отображать координаты, когда они уже транслируются, но при каждом повторении функции smashIt().node() -event будет предоставлять все узлы JSON из файла JSON до этой точки (всегда будет около 50-100 более по сравнению с предыдущим smashIt() исполнения.

Что я ищу способ недействительных ошибок JSON и пусть гобой .node() -метода ждать (или лучшую идею?), пока JSON действует вместо используя .fail-Approach, таким образом, используя только одно исполнение smashIt(), в котором неправильно обрабатываются неправильные ошибки JSON.
Я надеялся, что Oboe.js справится с этим им но это не так.

+0

Кажется, что гобою нужен файл, который он получает, чтобы быть полным и действительным файлом JSON. То, что делает Гобой, это то, что он может начать обрабатывать JSON, даже если он просачивается, потому что, например, вы находитесь на медленном соединении. Возможно, есть способ настроить поток прямо из гобоя в ваш simlautor, возможно, с прокси между ними. Если можно подождать симуляции, попробуйте, это кажется намного проще. – Halcyon

+0

На самом деле гораздо проще ждать симуляции, но это слишком долго. Причина, по которой я пытаюсь использовать потоковый подход, - это увидеть «прогресс», потому что некоторые симуляции могут занять несколько минут до его завершения. – Fluppe

ответ

2

Чтобы получить потоковое вещание, самый простой подход, о котором я могу думать, заключается в том, что вы просматриваете файл JSON с помощью XMLHTTPRequest.

Вам придется иметь дело с неполным JSON. Maye вы можете легко обнаружить границы входа и выполнить собственный пользовательский синтаксический анализ, чтобы получить частичные данные.

Улучшение будет состоять в том, чтобы извлекать только новые части файла. Вы можете использовать заголовок HTTP Range или иметь сценарий на стороне сервера, который будет возвращать содержимое, начиная со смещения.

Дальнейшим усовершенствованием было бы опрокинуть модель опроса XMLHTTPRequest и использовать WebSockets или ServerSentEvents для реализации модели push. Вы можете сделать это с помощью простого демона, который периодически считывает JSON-файл, или, может быть, вы даже можете написать демона, который подключается непосредственно к вашему симулятору [усиление программного обеспечения].

Смежные вопросы