Инкрементный анализ JSON в php

В php-программе я хочу постепенно анализировать JSON. Например, с учетом частичного JSON

[1, 2, {"id": 3},

Я хочу получить 1, 2 и словарь даже до того, как остальная часть входа JSON будет передана. php json_decode просто возвращает NULL, и, похоже, нет способа получить позицию ошибки.

Ответы

Ответ 1

Обновление

Я написал небольшой класс, который выполняет char -by- char парсинг ввода JSON. https://github.com/janeklb/JSONCharInputReader

Свежий от прессов, поэтому, вероятно, появилось несколько ошибок. Если вы решите попробовать, дайте мне знать!

-

Не могли бы вы (при отслеживании '{', '[', ']', '}' scope) разбить поток на каждую запятую, не являющуюся частью строкового значения? А затем обрабатывать каждый токен с помощью json_decode()?

Это решение будет работать лучше всего, если в потоке json не было много больших объектов (поскольку они будут обрабатываться только после их полного заполнения).

Изменить: если у него большие объекты, эта стратегия может быть изменена, чтобы выглядеть немного "глубже", но сложность здесь будет стрелять.

Ответ 3

Там есть простой обход, если каждый отдельный элемент гарантированно будет принят в нем целиком или другими словами - вы не можете получить, например. просто половина объекта вроде этого:

{"a": 1,

json_decode() вернет NULL, потому что строка, которую вы передаете, не является допустимой строкой JSON. Замените конечную запятую конечной скобкой и там вы:

[1, 2, {"id": 3}]

Нет проблем в его расшифровке и ждать, пока другие части потока будут получены позже.