LINUX.ORG.RU

json_decode не декодит строку

 , , ,


1

2

Есть кусок кода задача которого парсить ид номера из группы ВК через API. Делаю POST запрос получаю ответ json, но вывести ид номера в отдельную переменную не выходит. Что можете подсказать?

<?PHP
$group_id = '1';
$offset = '0';
$count = '1000';
$ch = curl_init('http://api.vk.com/method/groups.getMembers');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, "group_id=$group_id&offset=$offset&count=$count");
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
$result = curl_exec($ch); //в $result лежит ответ от сервера в json
curl_close($ch);
$result_decoded = json_decode("$result"); //тут этот json декодим
$ids = $result_decoded->{'users'}; //Пытаюсь вытащить только нужную часть ответа
echo "$ids"; //Нечего не выходит T_T
?>
/*
Так выглядит ответ от API:
{"response":{"count":3191,"users":[443289,598941,796845,906588.... дальше также идут просто номера ]}}
*/


Ответ на: комментарий от Hinex

Разложить большую кучу говна в маленькие говнокучки — функции.

deep-purple ★★★★★
()
Ответ на: комментарий от Hinex

Что-то типа такого:

$result_decoded = json_decode($result, true);
$ids = $result_decoded['response']['users'];

Вообще, сделайте var_dump и посмотрите структуру массива:

$result_decoded = json_decode($result, true);
var_dump($result_decoded);
KRoN73 ★★★★★
()
Последнее исправление: KRoN73 (всего исправлений: 2)
Ответ на: комментарий от Deleted

Тогда json_decode надо указать, что она должна вернуть массив. Так что всё правильно. Ну почти.

$ids = $result_decoded->response->users;
Kilte ★★★★★
()
Ответ на: комментарий от Deleted

Альтернативный синтаксис. Понятно что делать так не стоит, но иногда это может помочь. К примеру

$responseProp = 'users';
$result_decoded->{$responseProp}

kiotoze ★★★★
()
Ответ на: комментарий от KRoN73

Что-то типа такого:
$result_decoded = json_decode($result, true);
$ids = $result_decoded['response']['users'];

Выдает

{"response":{"count":309752,"users":[1,5,6,10,11.....]}}bool(true) int(1)

Я только вчера начал изучать php, и нечего не понимаю T_T

Hinex
() автор топика

1)

$result_decoded->{'users'}

Это что за синтаксис? Я такое только в перле видел.

2) Ты невнимателен

$result_decoded->response->users

Вот что даст доступ к твоему массиву

3)

echo "$ids"

То, что ты пытаешься получить - массив, а echo предназначен для вывода скаляров, искользуй print_r или var_dump

r_asian ★☆☆
()
Ответ на: комментарий от r_asian

Это что за синтаксис? Я такое только в перле видел.

здрасьте, я такое еще в 5.1 писал.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.