有没有办法通过facebook PHP SDK V4获得Json或数组格式的facebook响应?
例如,请求有没有办法通过facebook PHP SDK V4获得Json或数组格式的facebook响应?,php,facebook,facebook-graph-api,facebook-php-sdk,Php,Facebook,Facebook Graph Api,Facebook Php Sdk,例如,请求 $request = new FacebookRequest($session, 'GET','/me/accounts?fields=id,name,access_token'); $response = $request->execute(); $arrayResult = $response->getGraphObject()->asArray(); print_r($arrayResult); 返回 Array ( [data] => Ar
$request = new FacebookRequest($session, 'GET','/me/accounts?fields=id,name,access_token');
$response = $request->execute();
$arrayResult = $response->getGraphObject()->asArray();
print_r($arrayResult);
返回
Array (
[data] => Array (
[0] => stdClass Object (
[id] => 01010011100001111000111 #it's a fake id
[name] => MyAwesomePageName #And a fake name
)
)
[paging] => stdClass Object (
[next] => https://graph.facebook.com/v2.0/01010011100001111000111/accounts?fields=id,name&access_token=RanDoMAndFaaKKeEACCessToKen&limit=5000&offset=5000&__after_id=enc_IdOnOTKnoWWhAtThiSIs
)
)
是的。
我想检索数组中的所有响应,并且不包含这些stdClass对象。
就像以前版本的api一样。
谢谢。正如您所发现的,Facebook SDK的asArray()方法是有限的。但是,您可以使用get\u object\u vars($object)手动将对象转换为数组代码>函数。在您的示例中,您可以执行以下操作:
$array = get_object_vars( $arrayResult['data'][0] );
这将把页面对象转换成数组。该函数不是递归函数,因此需要将每个对象转换为数组
$fb = new Facebook([...]);
$response = $fb->get('/me', '{access-token}');
$array = $response->getDecodedBody();
您可以使用如下递归函数:
function object_to_array($obj) {
$arr = array();
if($obj instanceOf GraphObject){
if(is_scalar($obj->asArray()) )
$arr = $obj->asArray();
else{
foreach ($obj->getPropertyNames() as $propName) {
$arr[$propName] = object_to_array($obj->getProperty($propName));
}
}
}else if(is_array($obj)){
foreach ($obj as $propKey => $propValue) {
$arr[$propKey] = object_to_array($obj[$propValue]);
}
}else $arr = $obj;
return $arr;
}
正如您所发现的,Facebook SDK的asArray()方法是有限的。但是,您可以使用get\u object\u vars($object)手动将对象转换为数组代码>函数。在您的示例中,您可以执行以下操作:
$array = get_object_vars( $arrayResult['data'][0] );
这将把页面对象转换成数组。该函数不是递归函数,因此需要将每个对象转换为数组
$fb = new Facebook([...]);
$response = $fb->get('/me', '{access-token}');
$array = $response->getDecodedBody();
您可以使用如下递归函数:
function object_to_array($obj) {
$arr = array();
if($obj instanceOf GraphObject){
if(is_scalar($obj->asArray()) )
$arr = $obj->asArray();
else{
foreach ($obj->getPropertyNames() as $propName) {
$arr[$propName] = object_to_array($obj->getProperty($propName));
}
}
}else if(is_array($obj)){
foreach ($obj as $propKey => $propValue) {
$arr[$propKey] = object_to_array($obj[$propValue]);
}
}else $arr = $obj;
return $arr;
}
更简单的方法可能是从$response中获取原始JSON并自己解码:
$request = new FacebookRequest($session, 'GET', '/me/accounts?fields=id,name,access_token');
$response = $request->execute();
$array = json_decode($response->getRawResponse(), true);
print_r($array);
更新
截至,您可以在FacebookResponse
对象上使用getDecodedBody()
(这将为您执行JSON解码并返回一个数组)
更简单的方法可能是从$response中获取原始JSON并自己解码:
$request = new FacebookRequest($session, 'GET', '/me/accounts?fields=id,name,access_token');
$response = $request->execute();
$array = json_decode($response->getRawResponse(), true);
print_r($array);
更新
截至,您可以在FacebookResponse
对象上使用getDecodedBody()
(这将为您执行JSON解码并返回一个数组)
只需使用json\u decode($arrayResult)
即可获得json输出。您得到的输出只是一个php数据结构。只需使用json\u decode($arrayResult)
即可获得json输出。您得到的输出只是一个php数据结构。我们可以简单地将json作为数组进行编码和解码
$arrayResult = json_decode(json_encode($appreq['data'][0]),true);
样本输出
我们可以简单地将json_编码和解码为一个数组
$arrayResult = json_decode(json_encode($appreq['data'][0]),true);
样本输出
不,这是不可能的。这是4.0中的一个漏洞,将在4.1中修复。不,这是不可能的。这是4.0中的一个漏洞,将在4.1中修复。我使用这种方式,看起来效果很好。唯一的更新是getRawResponse()看起来像是来自旧规范,从5.0开始,它现在应该使用$response->getBody(),我用这种方式,看起来效果很好。唯一的更新是getRawResponse()看起来像是来自旧规范,从5.0开始,它现在应该使用$response->getBody()