解析来自 api 调用的 json 响应 - foreach 错误


Parsing Json Response from api call - foreach error

我正在使用Instagram api。这个问题不是Instagram具体的,而是关于解析 api 调用返回的响应。该 api 适用于分页。通过一些研究,我找到了将所有结果大量获取并避免分页的方法。我在解析 json 文件时遇到问题。在foreach循环中,我尝试解析,但出现此错误:Invalid argument supplied for foreach() .如何在foreach循环中正确解析 json 文件值?

链接到

解释该过程的文章,如果不熟悉 api,则

此处的问题:尝试在foreach loop中解析 - 包含测试访问令牌。这可以从任何地方进行测试

$get_media_url = 'https://api.instagram.com/v1/tags/nataliguatemipoa/media/recent?access_token=6678174.467ede5.205a03ebc4b74d4082823781c3149575';
$media = getResults($get_media_url); //Look Below to find function details
foreach($media['data'] as $insta){
        $source_id = $insta['id'];
    }

下面是一个Instagram回应的例子,

Array
(
    [0] => stdClass Object
        (
            [pagination] => stdClass Object
                (
                    [next_min_id] => 1407287255810188
                    [deprecation_warning] => next_max_id and min_id are deprecated for this endpoint; use min_tag_id and max_tag_id instead
                    [min_tag_id] => 1407287255810188
                )
            [meta] => stdClass Object
                (
                    [code] => 200
                )
            [data] => Array
                (
                    [0] => stdClass Object
                        (
                            [attribution] => 
                            [tags] => Array
                                (
                                    [0] => muff
                                    [1] => hairstylist
                                )
//Cut the rest for example purposes

进行 API 调用

function __apiCall($url, $post_parameters = FALSE) {
        // Initialize the cURL session
        $curl_session = curl_init();
        // Set the URL of api call
        curl_setopt($curl_session, CURLOPT_URL, $url);
        // If there are post fields add them to the call
        if($post_parameters !== FALSE) {
            curl_setopt ($curl_session, CURLOPT_POSTFIELDS, $post_parameters);
        }
        // Return the curl results to a variable
        curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, 1);
        // Execute the cURL session
        $contents = curl_exec ($curl_session);
        // Close cURL session
        curl_close ($curl_session);
        // Return the response
        return  json_decode($contents);
    }

获取所有分页结果

function getResults($url){
        $gotAllResults = false;
        $results = array();
        while(!$gotAllResults) {
        $result = $this->__apiCall($url);
        $results[] = $result;
        if (!property_exists($result->pagination, 'next_url')) {
            $gotAllResults = true;
        } else {
            $url = $result->pagination->next_url;
        }
    }
    return $results;
    }

$insta是一个对象,而不是一个数组。您应该这样引用:

foreach($media[data] as $insta){
    $source_id = $insta->id;
}

对象被引用为 -> 。数组被引用为[]

这里有两个选项之一,您可以尝试将其引用为第一个:

foreach($media['data'] as $insta){
    $source_id = $insta->id;
}

或者你可以尝试作为一个对象

foreach($media->data as $insta){
    $source_id = $insta->id;
}

尝试将其转换为array -

foreach((array)$media[0]['data'] as $insta) {
   $source_id = $insta->id;
}