В php-программе я хочу постепенно анализировать JSON. Например, учитывая частичный JSON
[1, 2, {"id": 3},
Я хочу получить 1, 2 и словарь даже до того, как остальная часть входа JSON будет передана. php's json_decode
просто возвращает NULL
и, похоже, нет способа получить позицию ошибки.
Обновить
Я написал небольшой класс, который выполняет парсинг ввода JSON char-by-char. https://github.com/janeklb/JSONCharInputReader
Свежий от прессов, поэтому, вероятно, у вас есть несколько ошибок. Если вы решите попробовать, дайте мне знать!
–
Не могли бы вы (при отслеживании '{', '[', ']', '}' scope) разбить поток на каждую запятую, которая не является частью строкового значения? А затем обрабатывать каждый токен с помощью json_decode ()?
Это решение будет работать лучше всего, если в потоке json не было много больших объектов (так как они будут анализироваться только после их полного заполнения).
Изменить: если у него большие объекты, эта стратегия может быть изменена, чтобы выглядеть немного «глубже», но сложность здесь будет стрелять.
Я написал SAX-подобный потоковый парсер JSON, который должен сделать трюк. Дайте мне знать, если это сработает!
Существует простая работа, если каждый отдельный элемент гарантированно будет получен в полном объеме, или, другими словами, вы не можете получить, например, только половину объекта, например:
{"a": 1,
json_decode()
вернет NULL, потому что строка, которую вы передаете, не является допустимой строкой JSON. Замените конечную запятую конечной скобкой и там вы:
[1, 2, {"id": 3}]
В декодировании сейчас нет проблем и ждать, пока другие части потока будут получены позже.