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]   

> Без описания
kefzce
Отправлено: 02 Августа, 2016 - 02:53:33
Post Id



Новичок


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


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




Здравствуйте,подскажите пожалуйста есть файл формата 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 документе выступает в роли ключа,я не понимаю,а заставить себя продолжить писать вроде варианта выше не могу.
Не судите строго,я только недавно опять засела за языки(
 
 Top
Fart
Отправлено: 02 Августа, 2016 - 18:40:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


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




По сабжу:

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, массивы

(Отредактировано автором: 02 Августа, 2016 - 18:43:16)

 
 Top
kefzce
Отправлено: 02 Августа, 2016 - 20:21:17
Post Id



Новичок


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


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




В том то и дело что многоуровневого ключа нету,массив начинается с {
 
 Top
Fart
Отправлено: 02 Августа, 2016 - 21:49:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016  


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




Покажи исходные данные
 
 Top
Viper
Отправлено: 02 Августа, 2016 - 21:55:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




Зачем городить костыли? Если у вас объект, так и работайте с объектом. На кой черт городить из него массив?
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 Что конкретно у вас не получается, не работает?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
kefzce
Отправлено: 02 Августа, 2016 - 23:20:39
Post Id



Новичок


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


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




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?
 
 Top
Viper
Отправлено: 02 Августа, 2016 - 23:33:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




kefzce пишет:
Это тот самый ООП PHP?
нет Улыбка Просто один из способов работы с разными типами данных.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
kefzce
Отправлено: 02 Августа, 2016 - 23:47:01
Post Id



Новичок


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


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




Viper пишет:
kefzce пишет:
Это тот самый ООП PHP?
нет Улыбка Просто один из способов работы с разными типами данных.

Спасибо еще раз за помощь,плюсик вам в карму Закатив глазки
 
 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