История изменений
Исправление pon4ik, (текущая версия) :
Ну вот смотри, допустим ты читаешь с сети. Для наглядности возьмём udp. Есть характеристика сети mtu - максимум байт в пакете (обычно порядка 1500 байт). Опять же для наглядности возьмём mtu = 8.
Клиент шлёт запрос { «type»: «hello»}
Тогда ты получишь такие пакеты(если не заморачиваться с порядком пакетов и потерями, это уже ответственность транспорта):
{ "type"
: "hello
"}
Согласно спецификации json - документ всегда является объектом. Однако часто эту часть расширяют до условия что документ это обьект или массив обьектов.
Соответственно мы всегда можем пропустить байты в потоке до тех пор, пока у нас не появится потенциальное начала нового обьекта или массива и парсить посимвольно. Пропуск это уже опционально, т.к. наличие нештатных символов в потоке во многих случаях есть исключительная ситуация.
Вот пример реализации на том же python - naya. Однако, обидно, что такую элементарную вещь не сделали частью стандартной библиоткеи.
Исходная версия pon4ik, :
Ну вот смотри, допустим ты читаешь с сети. Для наглядности возьмём udp. Есть характеристика сети mtu - максимум байт в пакете (обычно порядка 1500 байт). Опять же для наглядности возьмём mtu = 8.
Клиент шлёт запрос { «type»: «hello»}
Тогда ты получишь такие пакеты(если не заморачиваться с порядком пакетов и потерями, это уже ответственность транспорта):
{ "type"
: "hello
"}
Согласно спецификации json - документ всегда является объектом. Однако часто эту часть расширяют до условия что документ это обьект или массив обьектов.
Соответственно мы всегда можем пропустить байты в потоке до тех пор, пока у нас не появится потенциальное начала нового обьекта или массива и парсить посимвольно. Пропуск это уже опционально, т.к. наличие нештатных символов в потоке во многих случаях есть нештатная ситуация.
Вот пример реализации на том же python - naya. Однако, обидно, что такую элементарную вещь не сделали частью стандартной библиоткеи.