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. Dmitriy8787 - 06 Февраля, 2015 - 11:57:42 - перейти к сообщению
Здравствуйте! Не могу вывести преобразованную строку из 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.  
2. Sail - 06 Февраля, 2015 - 12:22:23 - перейти к сообщению
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 для подмассива Улыбка
3. Dmitriy8787 - 06 Февраля, 2015 - 12:31:31 - перейти к сообщению
Дело в том что результат не выводится.
4. Dmitriy8787 - 06 Февраля, 2015 - 12:33:20 - перейти к сообщению
Json файл:
5. Sail - 06 Февраля, 2015 - 12:38:19 - перейти к сообщению
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.  
6. Dmitriy8787 - 06 Февраля, 2015 - 13:12:54 - перейти к сообщению
как вывести без print_r($k); а echo.
Дело в том что с print_r($k) у меня результат выводило.
7. Sail - 06 Февраля, 2015 - 13:15:53 - перейти к сообщению
Dmitriy8787, $k - массив.
Рекурсивно обходите его и выводите, требуемые данные (ключи, значения).
8. Dmitriy8787 - 06 Февраля, 2015 - 14:46:53 - перейти к сообщению
можете привести пример.
9. Sail - 06 Февраля, 2015 - 15:17:55 - перейти к сообщению
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. }
10. Dmitriy8787 - 06 Февраля, 2015 - 22:32:09 - перейти к сообщению
Подскажите как вместо echo результат загнать в массив для последующей его обработки.
11. Sail - 09 Февраля, 2015 - 10:07:39 - перейти к сообщению
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);

 

Powered by ExBB FM 1.0 RC1