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]   

> Без описания
Frozel
Отправлено: 31 Марта, 2017 - 19:34:17
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Март 2017  


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




Привет всем, второй день мучаюсь с json строкой
Спойлер (Отобразить)


Задача: вытащить url фотографии

Этот json из callback api vk:
case 'message_new':
$atch = $data->object->attachments;
$urlphoto = json_decode($atch,true);
//начиная с этого момента я не понимаю как добраться до типа "photo_1280"
$urlphoto->attachments;

Любой другой тип до массива атачмента парсится легко, но с атачментом попытки возвращают либо пустые массивы array либо null либо вовсе ничего.
 
 Top
Мелкий Супермодератор
Отправлено: 31 Марта, 2017 - 19:42:30
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




А зачем вы аттач пытаетесь ещё раз раскодировать? Это один json, а не дважды закодированный.
PHP:
скопировать код в буфер обмена
  1. $json = '{"type":"message_new","object":{"id":123,"date":1234,"out":0,"user_id":12345,"read_state":0,"title":" ... ","body":"","attachments":[{"type":"photo","photo":{"id":123456,"album_id":1,"owner_id":1234567,"photo_1280":"https:\/\/pp.userapi.com\/XXX\/XXX\/XXX\/XXX.jpg"}}]},"group_id":12345678}';
  2. var_dump(json_decode($json, true)['object']['attachments'][0]['photo']['photo_1280']);


-----
PostgreSQL DBA
 
 Top
Frozel
Отправлено: 31 Марта, 2017 - 19:49:37
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Март 2017  


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




Мелкий пишет:
А зачем вы аттач пытаетесь ещё раз раскодировать? Это один json, а не дважды закодированный.
PHP:
скопировать код в буфер обмена
  1. $json = '{"type":"message_new","object":{"id":123,"date":1234,"out":0,"user_id":12345,"read_state":0,"title":" ... ","body":"","attachments":[{"type":"photo","photo":{"id":123456,"album_id":1,"owner_id":1234567,"photo_1280":"https:\/\/pp.userapi.com\/XXX\/XXX\/XXX\/XXX.jpg"}}]},"group_id":12345678}';
  2. var_dump(json_decode($json, true)['object']['attachments'][0]['photo']['photo_1280']);


Спасибо, но я не понимаю как обратиться к json строке, что передается в callback, поэтому делаю это таким образом:
PHP:
скопировать код в буфер обмена
  1. case 'message_new':
  2. $atch = $data->object->attachments;
  3. $urlphoto = json_decode($atch,true);


дальше на сколько я понимаю, возвращается json строка:
PHP:
скопировать код в буфер обмена
  1. [{"type":"photo","photo":{"id":123456,"album_id":1,"owner_id":1234567,"photo_1280":"https:\/\/pp.userapi.com\/XXX\/XXX\/XXX\/XXX.jpg"}}]


И тут уже встает вопрос: как вытащить url из photo_1280

(Отредактировано автором: 31 Марта, 2017 - 19:50:35)

 
 Top
Мелкий Супермодератор
Отправлено: 31 Марта, 2017 - 20:00:03
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Мелкий пишет:
А зачем вы аттач пытаетесь ещё раз раскодировать? Это один json, а не дважды закодированный.


-----
PostgreSQL DBA
 
 Top
Frozel
Отправлено: 31 Марта, 2017 - 20:02:17
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Март 2017  


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




Мелкий пишет:
Мелкий пишет:
А зачем вы аттач пытаетесь ещё раз раскодировать? Это один json, а не дважды закодированный.


Не понимаю вопроса, где я второй раз его раскодирую? Имеете ввиду, что в
PHP:
скопировать код в буфер обмена
  1. $atch = $data->object->attachments;

приходит раскодированная строка?

Json строка, которую я указал, я ее вытащил из запроса callback чтобы показать наглядно, что она из себя представляет, а в коде я могу получить ее только через:
PHP:
скопировать код в буфер обмена
  1. $atch = $data->object->attachments;

(Отредактировано автором: 31 Марта, 2017 - 20:06:41)

 
 Top
Мелкий Супермодератор
Отправлено: 31 Марта, 2017 - 20:08:29
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Frozel пишет:
приходит раскодированная строка?

Да, json_decode умеет распаковывать массивы в том числе.
Документ под спойлером в начале темы - это один-единственный json и разбирается он полностью одним вызовом json_decode.
В object->attachments расположен массив. Массив асоциативных массивов или массив stdobject, в зависимости от второго параметра json_decode.


-----
PostgreSQL DBA
 
 Top
Frozel
Отправлено: 31 Марта, 2017 - 20:17:18
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Март 2017  


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




Мелкий пишет:
Frozel пишет:
приходит раскодированная строка?

Да, json_decode умеет распаковывать массивы в том числе.
Документ под спойлером в начале темы - это один-единственный json и разбирается он полностью одним вызовом json_decode.
В object->attachments расположен массив. Массив асоциативных массивов или массив stdobject, в зависимости от второго параметра json_decode.


Это конечно всё замечательно и понятноУлыбка Но я не знаю как вызвать эту json строку иными способами, кроме как обращаться непосредственно к объекту в кейсе. После обращения к объекту, в данном случае аттачмент, возвращается его массив, и как парсить из него какой-либо тип - я не понимаю Не понял

(Отредактировано автором: 31 Марта, 2017 - 21:04:07)

 
 Top
ytrewq123
Отправлено: 31 Марта, 2017 - 20:56:08
Post Id


Посетитель


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


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




Так в чём проблема???
Какую строку ЁСОНа вы имеете?
Если эту, то так.
PHP:
скопировать код в буфер обмена
  1. [/PHP]
  2. $json = json_decode('[{"type":"photo","photo":{"id":123456,"album_id":1,"owner_id":1234567,"photo_1280":"https:\/\/pp.userapi.com\/XXX\/XXX\/XXX\/XXX.jpg"}}]');
  3. var_dump( $json[0]->photo->photo_1280);
  4. [PHP]
 
 Top
Frozel
Отправлено: 31 Марта, 2017 - 21:02:29
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Март 2017  


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




Решил проблемуУлыбка До меня всё-таки дошел смысл слов про "дважды раскодировать" Радость
 
 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