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. kefzce - 02 Августа, 2016 - 02:53:33 - перейти к сообщению
Здравствуйте,подскажите пожалуйста есть файл формата json вида:
CODE (javascript):
скопировать код в буфер обмена
  1.         {
  2.                 "id":"3222",
  3.                 "kinopoisk_id":"425673",
  4.                 "name":"\u041e\u0445\u043e\u0442\u043d\u0438\u043a\u0438 \u0437\u0430 \u043f\u0440\u0438\u0432\u0438\u0434\u0435\u043d\u0438\u044f\u043c\u0438",
  5.                 "original_name":"Ghostbusters",
  6.                 "year":"2016"
  7.         },

Пытаюсь написать скрипт обработчик и неоднозначное чувство,вроде бы и все получается,а вроде бы и выглядит просто ужасно:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $jsondata = file_get_contents('videolist.json');
  3. $json = json_decode($jsondata,true);
  4. echo $json[0]['id'] .'<br />';
  5. echo $json[0]['kinopoisk_id'].'<br />';
  6. echo $json[0]['name'].'<br />';
  7. echo $json[0]['original_name'].'<br />';

у меня увы весьма скудный опыт в PHP,для асоциативных массивов я всегда использовала foreach ($json as $key => $value) вроде:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. foreach($json['movies'] as $key => $value){
  3.         echo '<h4>'.$value['id'].'</h4>';
  4.         echo '<li>Кинопоиск ID: '.$value['kinopoisk_id'].'</li>';
  5.         echo '<li>Имя: '.$value['name'].'</li>';
  6.         echo '<li>Название: '.$value['original_name'].'</li>';
  7. }
  8. ?>

А что в данном json документе выступает в роли ключа,я не понимаю,а заставить себя продолжить писать вроде варианта выше не могу.
Не судите строго,я только недавно опять засела за языки(
2. Fart - 02 Августа, 2016 - 18:40:58 - перейти к сообщению
По сабжу:

1. если стоит в json_decode флаг TRUE, то данные вытаскиваешь как массив.

2.1. так как у тебя данные находятся в {} и я не вижу полностью json, то для вывода данных

PHP:
скопировать код в буфер обмена
  1. echo $json['id'] .'<br />';
  2. echo $json['kinopoisk_id'].'<br />';
  3. echo $json['name'].'<br />';
  4. echo $json['original_name'].'<br />';


2.2. если многоуровневый и есть ключ, то

CODE (text):
скопировать код в буфер обмена
  1. {
  2. "0":{
  3. "id":"3222",
  4. "kinopoisk_id":"425673",
  5. "name":"\u041e\u0445\u043e\u0442\u043d\u0438\u043a\u0438 \u0437\u0430 \u043f\u0440\u0438\u0432\u0438\u0434\u0435\u043d\u0438\u044f\u043c\u0438",
  6. "original_name":"Ghostbusters",
  7. "year":"2016"},
  8. "1":{
  9. "id":"3222",
  10. "kinopoisk_id":"425673",
  11. "name":"\u041e\u0445\u043e\u0442\u043d\u0438\u043a\u0438 \u0437\u0430 \u043f\u0440\u0438\u0432\u0438\u0434\u0435\u043d\u0438\u044f\u043c\u0438",
  12. "original_name":"Ghostbusters",
  13. "year":"2016"}
  14. }


PHP:
скопировать код в буфер обмена
  1. echo $json[ключ]['id'] .'<br />';
  2. echo $json[ключ]['kinopoisk_id'].'<br />';
  3. echo $json[ключ]['name'].'<br />';
  4. echo $json[ключ]['original_name'].'<br />';


3.
PHP:
скопировать код в буфер обмена
  1. foreach($json as $key => $value){
  2.         echo '<h4>'.$value['id'].'</h4>';
  3.         echo '<li>Кинопоиск ID: '.$value['kinopoisk_id'].'</li>';
  4.         echo '<li>Имя: '.$value['name'].'</li>';
  5.         echo '<li>Название: '.$value['original_name'].'</li>';
  6. }


PS: советую еще раз прочитать foreach, json_decode, массивы
3. kefzce - 02 Августа, 2016 - 20:21:17 - перейти к сообщению
В том то и дело что многоуровневого ключа нету,массив начинается с {
4. Fart - 02 Августа, 2016 - 21:49:50 - перейти к сообщению
Покажи исходные данные
5. Viper - 02 Августа, 2016 - 21:55:12 - перейти к сообщению
Зачем городить костыли? Если у вас объект, так и работайте с объектом. На кой черт городить из него массив?
PHP:
скопировать код в буфер обмена
  1. $obj = json_decode($json);
  2.  
  3. foreach ($obj as $item) {
  4.         echo '<h4>' . $item->id . '</h4>';
  5.         echo '<li>Кинопоиск ID: ' . $item->kinopoisk_id . '</li>';
  6.         echo '<li>Имя: ' . $item->name . '</li>';
  7.         echo '<li>Название: ' . $item->original_name . '</li>';
  8. }


kefzce Что конкретно у вас не получается, не работает?
6. kefzce - 02 Августа, 2016 - 23:20:39 - перейти к сообщению
Viper пишет:
Зачем городить костыли? Если у вас объект, так и работайте с объектом. На кой черт городить из него массив?
PHP:
скопировать код в буфер обмена
  1. $obj = json_decode($json);
  2.  
  3. foreach ($obj as $item) {
  4.         echo '<h4>' . $item->id . '</h4>';
  5.         echo '<li>Кинопоиск ID: ' . $item->kinopoisk_id . '</li>';
  6.         echo '<li>Имя: ' . $item->name . '</li>';
  7.         echo '<li>Название: ' . $item->original_name . '</li>';
  8. }


kefzce Что конкретно у вас не получается, не работает?

Не знала о технической возможности реализации таким образом,взяла на заметку спасибо,тему можно закрыть.
(Добавление)
Это тот самый ООП PHP?
7. Viper - 02 Августа, 2016 - 23:33:31 - перейти к сообщению
kefzce пишет:
Это тот самый ООП PHP?
нет Улыбка Просто один из способов работы с разными типами данных.
8. kefzce - 02 Августа, 2016 - 23:47:01 - перейти к сообщению
Viper пишет:
kefzce пишет:
Это тот самый ООП PHP?
нет Улыбка Просто один из способов работы с разными типами данных.

Спасибо еще раз за помощь,плюсик вам в карму Закатив глазки

 

Powered by ExBB FM 1.0 RC1