Модуль для потокового парсинга JSON json/parse
kobezzza opened this issue · 0 comments
Что нужно?
В PR #257 у нас появляется работать с данными от сервера в виде потока на основе асинхронного итератора. Т. е. теперь мы можем запросить у сервера, скажем 100 карточек, но не дожидаться загрузки всех, а начинать рендерить чанками по 5 или еще как. Но, т. к. сервер у нас отдает JSON, который "из коробки" не поддерживает поточную обработку, то нам нужно сделать этот самим или заюзать готовое.
Есть ли готовые либы?
Есть отличная библиотека: https://github.com/uhop/stream-json, которая по API подходит для нас идеально, но к сожалению она работает только под node.js, т. к. там используется их API потоков, а браузерный API - еще слишком сырой. У библиотеки есть про это issue, где автор пока не хочет добавлять поддержку браузерных потоков.
Других библиотек можно считать, что нет, т.к. они либо не обновлялись лет 8, либо с докой на китайском, либо с кривым API.
Нужно писать самим
Библиотека stream-json отлично подходит всем, кроме того, что использует потоки node.js.
Однако, у нас есть стандартизированный протокол асинхронных итераторов, который работает где угодно, поэтому, что нужно сделать:
- Переписать https://github.com/uhop/stream-json/blob/master/Parser.js , но в качестве источника использует итерируемый объект, а не node.js поток.
import { from } from 'core/json/parse';
for await (const {type, value} of from(IterableObject)) {
console.log(type, value);
}
- Фильтры и стримеры реализуем уже как обычные адаптеры для итератора
https://github.com/uhop/stream-json/tree/master/filters
https://github.com/uhop/stream-json/tree/master/streamers
Из пунктов essentials & utils нас интересует
Assembler и verify
Профит
Получаем написанную на ТС библиотеку, которая работает на современном стандартизированном API итераторов и "из-коробки" дружит с async.