либо вы изменяете синтаксический анализатор JSON, чтобы сделать это, как предложил Амаргош, либо вы можете создать простой алгоритм, который сделает это за вас, который пропускает строки и комментарии и отслеживает открытые скобки. когда не осталось открытых скобок, тогда у вас есть полное значение. повторяйте это, пока не закончите ввод.
однако я предлагаю попытаться решить проблему, поговорив с тем, кто несет ответственность за этот вывод, и убедить его сгенерировать действительный JSON, то есть [{"glossary": {"title": "example glossary"}, "aaa": "1212"},{"adada": "faka"}]
edit: , чтобы отделить объекты JSON, вам нужно поставить префикс перед каждым объектом JSON длиной (должно хватить 4 байта). затем вы считываете сокет, пока не получите нужное количество символов. следующие символы снова будут длиной следующего объекта. это обязательно, потому что TCP работает в пакетах. Вы можете не только иметь несколько JSON-объектов в одном пакете, но вы также можете иметь один JSON-объект, разделенный на два пакета.
Также пара советов:
- не использовать PHP для серверов сокетов. это не для этого. взгляните на Haxe , в частности на neko backend.
- не пишите такого рода вещи самостоятельно, если вам действительно не нужно. это скучная и тупая работа. Есть практически миллионы решений для сокет-серверов. Вы также должны взглянуть на Haxe remoting , который позволяет прозрачную связь между, например. Флэш-клиент и сервер сокетов Neko. Также обратите внимание на smartfox и red5.
edit2: вы недооцениваете проблему, и ваш подход не очень хорош. вы должны создать надежное решение, чтобы в тот день, когда вы захотите отправить массивы по проводам, у вас не будет полного отказа, потому что ваш «сплиттер» разрывается, или ваш анализатор JSON получает незавершенные объекты, потому что читается только половина объекта , то, что вы хотите сделать, может быть легко сделано: разбить ввод с помощью "}{"
, добавить "}"
к любому элементу, кроме последнего, и добавить "{"
к любому элементу, кроме первого. Тем не менее, я настоятельно рекомендую вам воздержаться от такого подхода, потому что вы пожалеете об этом в какой-то момент. если вы действительно думаете, что должны делать так, думайте сами, то постарайтесь, по крайней мере, сделать это правильно.