LINUX.ORG.RU

История изменений

Исправление 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. Однако, обидно, что такую элементарную вещь не сделали частью стандартной библиоткеи.