Facebook解码Json

时间:2012-04-25 15:57:29

标签: php json

我想解码用户的位置。 假设

"id": "100000564553314",
"name": "Adi Mathur",
"location": {
      "id": "106487939387579",
      "name": "Gurgaon, Haryana"
}

我使用脚本获取名称,但位置给我一个错误

  

不能使用stdClass类型的对象作为数组

$token_url = "https://graph.facebook.com/oauth/access_token?"
   . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
   . "&client_secret=" . $app_secret . "&code=" . $code;

$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);

$graph_url = "https://graph.facebook.com/me?access_token=" 
. $params['access_token'];

$user = json_decode(file_get_contents($graph_url));

echo $_SESSION['name']=$user->name;  // WORKS 
echo $_SESSION['fbid']=$user->id;     // WORKS

echo $_SESSION['location']=$user->location[0]; // ERROR
echo $_SESSION['location']=$user->location->name; // ERROR

2 个答案:

答案 0 :(得分:1)

考虑使用:

$user = json_decode(file_get_contents($graph_url), true);

这将确保$ user是一个关联数组而不是一个对象。然后你可以这样设置你的$ _SESSION变量:

$_SESSION['name']=$user['name'];
$_SESSION['fbid']=$user['id'];
$_SESSION['location']=$user['location']['name'];

答案 1 :(得分:1)

assoc中添加第truejson_decode

json_decode(file_get_contents(...),true);

这将返回一个数组而不是一个对象。然后,您可以使用数组表示法[]而不是对象运算符->