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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Здравствуйте! Не могу вывести преобразованную строку из Json

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Здравствуйте! Не могу вывести преобразованную строку из Json
Dmitriy8787
Отправлено: 06 Февраля, 2015 - 11:57:42
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Здравствуйте! Не могу вывести преобразованную строку из Json
PHP:
скопировать код в буфер обмена
  1.  
  2. $str_data = file_get_contents("yql.json");
  3. $data = json_decode($str_data,true);
  4. foreach($data as $k){
  5. echo $k;
  6. }
  7.  

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. "results":{"quote":[{"Symbol":"TIBX","Date":"2013-12-31","Open":"22.70","High":"22.86","Low":"22.46","Close":"22.48","Volume":"1727900","Adj_Close":"22.48"},{"Symbol":"TIBX","Date":"2013-12-30","Open":"22.48","High":"22.76","Low":"22.32","Close":"22.67","Volume":"1743300","Adj_Close":"22.67"}
  3.  
  4.  
 
 Top
Sail
Отправлено: 06 Февраля, 2015 - 12:22:23
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Dmitriy8787, в файле просто не правильный json.
Скобочек не хватает разных.
Сравните:
CODE (htmlphp):
скопировать код в буфер обмена
  1. {"results":
  2.     {"quote":
  3.         [
  4.         {"Symbol":"TIBX",
  5.             "Date":"2013-12-31",
  6.             "Open":"22.70",
  7.             "High":"22.86",
  8.             "Low":"22.46",
  9.             "Close":"22.48",
  10.             "Volume":"1727900",
  11.             "Adj_Close":"22.48"
  12.         },
  13.         {"Symbol":"TIBX",
  14.             "Date":"2013-12-30",
  15.             "Open":"22.48",
  16.             "High":"22.76",
  17.             "Low":"22.32",
  18.             "Close":"22.67",
  19.             "Volume":"1743300",
  20.             "Adj_Close":"22.67"
  21.         }
  22.         ]
  23.     }
  24. }
  25.  

Этот файл разбирается Вашим кодом.
С точностью до ошибки при попытке выполнить echo для подмассива Улыбка
 
 Top
Dmitriy8787
Отправлено: 06 Февраля, 2015 - 12:31:31
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Дело в том что результат не выводится.
 
 Top
Dmitriy8787
Отправлено: 06 Февраля, 2015 - 12:33:20
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Json файл:
Скачать файл: yql.json
Скачан раз: 40
 
 Top
Sail
Отправлено: 06 Февраля, 2015 - 12:38:19
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Dmitriy8787 пишет:
Дело в том что результат не выводится.

Так выведется:
PHP:
скопировать код в буфер обмена
  1. if($data === NULL) {
  2.     echo 'Jason cannot be decoded!';
  3. } elseif($data === FALSE) {
  4.     echo 'Ошибка выполнения функции json_decode';
  5. } else {
  6.     foreach($data as $k){
  7.         if(is_array($k)) {
  8.             echo '<pre>';
  9.             print_r($k);
  10.             echo '</pre>';
  11.         } else {
  12.             echo $k;
  13.         }
  14.     }
  15. }
  16.  
 
 Top
Dmitriy8787
Отправлено: 06 Февраля, 2015 - 13:12:54
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




как вывести без print_r($k); а echo.
Дело в том что с print_r($k) у меня результат выводило.
 
 Top
Sail
Отправлено: 06 Февраля, 2015 - 13:15:53
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Dmitriy8787, $k - массив.
Рекурсивно обходите его и выводите, требуемые данные (ключи, значения).
 
 Top
Dmitriy8787
Отправлено: 06 Февраля, 2015 - 14:46:53
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




можете привести пример.
 
 Top
Sail
Отправлено: 06 Февраля, 2015 - 15:17:55
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Dmitriy8787 пишет:
можете привести пример.

Например, так:
PHP:
скопировать код в буфер обмена
  1. function test_print($arr) {
  2.     return array_walk($arr, function($item, $key) {
  3.         if(is_array($item)) {
  4.             echo $key.': <br>';
  5.             return test_print($item);
  6.         } else {
  7.             echo $key.' => '.$item.'<br>';
  8.             return TRUE;
  9.         }
  10.     });
  11. }
  12.  
  13. $json_file = "yql.json";
  14. $str_data = file_get_contents("yql.json");
  15.  $data = json_decode($str_data, true);
  16. if($data === NULL) {
  17.     echo 'Jason cannot be decoded!';
  18. } elseif($data === FALSE) {
  19.     echo 'Ошибка выполнения функции json_decode';
  20. } else {
  21.     test_print($data);
  22. }
 
 Top
Dmitriy8787
Отправлено: 06 Февраля, 2015 - 22:32:09
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Подскажите как вместо echo результат загнать в массив для последующей его обработки.
 
 Top
Sail
Отправлено: 09 Февраля, 2015 - 10:07:39
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Dmitriy8787 пишет:
как вместо echo результат загнать в массив для последующей его обработки

У Вас после выполнения json_decode() уже есть массив.
Обращение к его элементам - по ключам, заданным в файле .json.
Например, вывод (ну или группировка) элементов 'results' для заданного файла может быть организован следующим образом:
PHP:
скопировать код в буфер обмена
  1.     $atmp = array();
  2.     foreach($data as $k) {
  3.         foreach($k['results']['quote'] as $value) {
  4.             foreach($value as $key => $val) {
  5.                 echo $key.' => \''.$val.'\''.'; ';
  6.             }
  7.             $atmp[] = $value;
  8.             echo "<br>";
  9.         }
  10.     }
  11.     var_dump($atmp);
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB