Как получить переменную из json в php

Гость Гость

Итак:
1. Я создаю приложение для вконтакте
2. На мой сервер приходит запрос вида: http://***.php?api_url=http://api.vkontakte.ru/api.php&api_id***&
3. Среди множества Get переменных есть переменная api_result записанная в формате json:
api_result={"response":[{"uid":39309499,"first_name":"Павел","last_name":"Ханин"}]}
4. Её обрабатывает php код
$api_result  = $_GET['api_result'];

$res=json_decode($api_result);

$response =  $res->response;

$uid = $response->uid;

echo $uid;
.
5. Кто может сказать почему ничего не появляется?
6. КВНщиков просьба не беспокоить!
Дополнено (1). to Жуть: не работает твой вариант
Дополнено (2). что то с decode не так - на $res уже проблема, var_dump($res) выдаёт: object(stdClass)#1 (1) { ["response"]=> array(1) { [0]=> object(stdClass)#2 (3) { ["uid"]=> int(39309499) ["first_name"]=> string(10) "Павел" ["last_name"]=> string(10) "Ханин" } } }
Дополнено (3). и не так тоже (Жуть)
Дополнено (4). давай начнём с того что $api_result={"response":[{"uid":39309499,"first_name":"Павел","last_name":"Ханин"}]}
Дополнено (5). я полностью скопировал твой код - у меня всё равно ничего не появляется!
Дополнено (6). PHP Version 5.2.14
Дополнено (7). Я подумал, может с помощью js сделать, но только объясните как - я там нуб, а да ещё xml вместо json использовать можно, но вряд ли это даст результат…
Дополнено (8). Ошибка сервера.

На веб-сайте произошла ошибка при получении http://127.0.0.1/json.php. Веб-сайт может быть закрыт на обслуживание или настроен неправильно.

Ошибка в последней строчке если её стереть то пустота появляется
Дополнено (9). NULL
Дополнено (10). а если $api_result get-ом взять то выдаёт 39309499integer

Жуть Жуть

Не $response =  $res->response;
а $response =  $res['response'];
С $uid аналогично.

Жуть Жуть

Странно. Постоянно обмениваюсь данными через json таким методом и всегда работает.
Что выдаст printr($res)? Если там всё нормально, то смотрим ниже - $response, если нет, то не отработала json_decode, тогда смотрим выше - $_GET['api_result'].

Гость Гость

Ну так сделайте var_dump($res);
Посмотрите, что внутри.

Жуть Жуть

Да уж, непонятно, для чего они так замуровали.
$res=json_decode($api_result);
$response =  $res['response'][0];
$uid = $response['uid'];

Жуть Жуть

Нет. Этот вариант рабочий точно, проверено у себя. Может мы разными пхп пользуемся? :)
Вот мой код (помещён в отдельную функцию):
$api_result="{\"response\":[{\"uid\":39309499,\"first_name\":\"Павел\",\"last_name\":\"Ханин\"}]}";
$js=json_decode($api_result, true);
return $js['response'][0]['uid'];

Вот что выведено:
39309499

Что соответствует действительности.

Жуть Жуть

Ну надо же! Только сейчас допёр! Я-то у себя по привычке давал команду json_decode делать ассоциативный массив, а здесь почему-то её отсутствие проглядел.

Жуть Жуть

лучший ответ
"всё равно ничего не появляется!"
Ну прям как дети. Не появляется только тогда, когда ничего не делается. Если его не видно на экране, это не значит, что его нет. Версия пхп тут ни при чем, это был сарказм. Типа, медведев-путин говорит по ящику, что всё у нас в стране хорошо, а мы ему, мы видимо в разных Россиях живём.
ДопУстим так:
function testjson()
{
$api_result="{\"response\":[{\"uid\":39309499,\"first_name\":\"Павел\",\"last_name\":\"Ханин\"}]}";
$js=json_decode($api_result, true);
return $js['response'][0]['uid'];
}
Затем вызови:
$myjs=testjson();
echo $myjs;
echo typeof($myjs);
И результат сюда.

Жуть Жуть

Замени её на
echo gettype($myjs);

Добавить комментарий | Похожие обсуждения

Вопросы и ответы по Вконтакте
Вопросы и ответы

Популярные вопросы и ответы о социальной сети www.vkontakte.ru (vk.com)