有没有办法通过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()