【问题标题】:JSON Property of non-object & Invalid argument supplied for foreach为 foreach 提供的非对象和无效参数的 JSON 属性
【发布时间】:2015-05-04 18:41:56
【问题描述】:

我有一个 wordpress 函数,它通过 Zebra_cURL 调用 API,然后使用 json_decode 适当地呈现数据。然而存在不稳定的行为,并且发生了以下两个错误:Trying to get property of non-object in [template file] on line 42 和第 50 行。

有问题的行如下:

//Course display callback function
 function display_courses($result) {
        $result->body = json_decode(html_entity_decode($result->body));
        $title = $result->body[0]->{'Title'};
        $term = $result->body[0]->{'Term'};
        $meetings = $result->body[0]->{'Meetings'};
        $status = $result->body[0]->{'Status'};
        $course_number = $result->body[0]->{'OfferingName'};
        $clean_course_number = preg_replace('/[^A-Za-z0-9\-]/', '', $course_number);
        $credits = $result->body[0]->{'Credits'};
        $instructor = $result->body[0]->{'InstructorsFullName'};
        $description = $result->body[0]->{'SectionDetails'}[0]->{'Description'};
    }

然后我收到一个错误Invalid argument supplied for foreach() in [template file] on line 64,即:

    //Call callback function    
            function parse_courses($result) {
                $result->body = json_decode(html_entity_decode($result->body));
                $course_data = array();
                    foreach($result->body as $course) {
                    [code]
            }
                   [more code]
}

我到底做错了什么导致这些错误?

这是the full template file 的链接。为大量的代码转储道歉,但我对此有点不知所措。

【问题讨论】:

    标签: php arrays json wordpress


    【解决方案1】:

    如果结果“符合预期”,则必须始终验证函数/方法的输出
    在您的情况下,您没有检查 json_decode() 返回的内容

    function parse_courses($result) {
        $result = json_decode(html_entity_decode($result->body));
        if ((!is_array ($result) && !is_object($result)) || 
            (is_array($result) || count($result) == 0) ||
            (json_last_error() != JSON_ERROR_NONE)) { // only for PHP >= 5.3.0
    
            // log the error or warning here ...
            // $input  = $result;
            // $output = print_r ($result, TRUE);
    
            // Only for PHP >= 5.3.0
            // json_last_error();
            // json_last_error_msg();
            return -1;
        }
        $result->body = $result;
        $course_data = array();
        foreach($result->body as $course) {
            [code]
        }
        [more code]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2011-02-07
      相关资源
      最近更新 更多