Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вывести массив JSON
Форумы портала PHP.SU » » Вопросы новичков » Вывести массив JSON

Страниц (1): [1]
 

1. Nanto - 26 Октября, 2015 - 10:44:31 - перейти к сообщению
Отдаю на сервер данные из клиента в json. Записываю их в файл в этом формате, получается что-то типа:
CODE (javascript):
скопировать код в буфер обмена
  1. {"id":"1","a":"1","b":"2","c":"3","d":"4"}
  2. {"id":"2","a":"1","b":"2","c":"3","d":"4"}
  3. ...

Запись идёт через:
PHP:
скопировать код в буфер обмена
  1. $current = json_encode($str["str"]);
  2. file_put_contents($file, $current, FILE_APPEND | LOCK_EX);

Потом по запросу отдаю их обратно клиенту. Проблема в том, что данные возвращаются не в формате json или даже массива, а просто как набор строк. Ну т.е. единичную строку браузер обрабатывает нормально, а вот на 2 и более уже спотыкается. В принципе понятно почему (хотя файербаг нормально разбирает json из нескольких строк, но вот сам JS отказывается).
Вопрос: самая простая конструкция чтобы корректно отдать клиенту массив json? Тут регулярку надо включчать или есть какие-то операторы для подобного обёртывания.
На выходе надо наверное что-то типа^
CODE (javascript):
скопировать код в буфер обмена
  1. [{..}, {..}, {..}]
2. Faraon-san - 26 Октября, 2015 - 11:40:01 - перейти к сообщению
CODE (javascript):
скопировать код в буфер обмена
  1. eval('{"id":"2","a":"1","b":"2","c":"3","d":"4"}')
3. Viper - 26 Октября, 2015 - 11:43:36 - перейти к сообщению
У вас невалидный json
Сохраняйте так

CODE (htmlphp):
скопировать код в буфер обмена
  1. [
  2. {"id":"1","a":"1","b":"2","c":"3","d":"4"},
  3. {"id":"2","a":"1","b":"2","c":"3","d":"4"}
  4. ]

Ну и желательно отдавать заголовок header('Content-type: application/json');
4. SAD - 26 Октября, 2015 - 11:44:39 - перейти к сообщению
За eval вешать нужно.

JSON.parse в помощь
5. Viper - 26 Октября, 2015 - 11:44:47 - перейти к сообщению
Faraon-san зачем костыль?
6. DeepVarvar - 26 Октября, 2015 - 11:46:29 - перейти к сообщению
SAD пишет:
За eval вешать нужно
EventListener?
7. Nanto - 26 Октября, 2015 - 11:52:34 - перейти к сообщению
SAD пишет:
За eval вешать нужно.

JSON.parse в помощь

JSON.parse не работает. Да я и так браузеру указываю что данные приходят в json. $.ajax в этом случае вроде сам парсить должен.
(Добавление)
Viper пишет:
У вас невалидный json
Сохраняйте так

CODE (htmlphp):
скопировать код в буфер обмена
  1. [
  2. {"id":"1","a":"1","b":"2","c":"3","d":"4"},
  3. {"id":"2","a":"1","b":"2","c":"3","d":"4"}
  4. ]

Ну и желательно отдавать заголовок header('Content-type: application/json');


Так в том-то и дело - каким образом так сохранить? Я в php, как свинья в апельсинах.
Данные серверу приходят по одной такой строке:
CODE (javascript):
скопировать код в буфер обмена
  1. {...}

Одну записали. Пришла вторая - что с ней делать? Дёргать первую, конкатенировать, раставлять синтаксис и записывать? Или как?
8. Viper - 26 Октября, 2015 - 12:40:25 - перейти к сообщению
Nanto пишет:
Одну записали. Пришла вторая - что с ней делать? Дёргать первую, конкатенировать, раставлять синтаксис и записывать? Или как?

входящие данные какого вида?
Можно просто считывать до закрывающей ] и добавлять. Насколько много данных в одном файле может быть?

Собстно для вас тема и ответ http://stackoverflow[dot]com/a/21725885/345874
9. Nanto - 26 Октября, 2015 - 14:45:11 - перейти к сообщению
Viper пишет:
входящие данные какого вида?
Можно просто считывать до закрывающей ] и добавлять. Насколько много данных в одном файле может быть?

Собстно для вас тема и ответ http://stackoverflow.com/a/21725885/345874


Данные отправляю как plain text такого формата:
CODE (javascript):
скопировать код в буфер обмена
  1. data: ({id: id, str: str}),

В одном файле не думаю что больше 20 таких строк будет.

Спасибо. Сделал реализацию по ссылке - теперь на клиенте разбор корректно происходит. Тему можно закрывать, наверное.

 

Powered by ExBB FM 1.0 RC1