Каков наилучший способ работы с большим JSON, разделенным между двумя (или более) частями буфера - PullRequest
1 голос
/ 08 марта 2019

Представьте себе ситуацию, когда у вас есть большой JSON, который в основном выглядит следующим образом:

{"name": "...", /*...*/, "data": "..."}

Этот JSON на самом деле очень большой. Кроме того, этот JSON передается мне в кусках буфера node.js. И поскольку JSON большой, есть два блока, первый из которых содержит name, а второй содержит data.

Куски могут выглядеть так:

{"name": "...", /*...*/, "da //chunk1
ta": "..."} //chunk2

Мне нужно изменить data на основе name. Как лучше всего это делать?

Проблема, с которой я застрял, заключается в том, что я не могу JSON.parse эти данные по очевидным причинам (включая потребление памяти). Так как мне справиться с этим сценарием без JSON.parse? Должен ли я написать свой собственный анализатор, чтобы определить, где data начинается и заканчивается?

1 Ответ

1 голос
/ 08 марта 2019

Ваши параметры довольно ограничены:

  1. Конкатенация буферов , анализ JSON, а затем работа с результирующим деревом объектов (влияние на память и все).

  2. Использование (или создание) потокового анализатора JSON.Например, Oboe.js (без присоединения) описывается следующим образом:

    Oboe.js - это библиотека Javascript с открытым исходным кодом для загрузки JSON с использованием потоковой передачи, сочетающая удобство DOM сскорость и плавность SAX.

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

    Мы можем загрузить деревья больше, чем доступно памяти.Или мы можем создать классические модели ООП из JSON или полностью преобразовать ваш JSON во время его чтения.

    Я обнаружил, что с помощью поиска "анализатор потоков json узла"; этот вопрос был вторым хитом, и на него есть ответ, относящийся к Гобой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...