在php表中使用Json数据

时间:2016-02-28 09:45:37

标签: php arrays json rest html-table

我通过进行REST调用来获取Json数组。这是代码。

<?php include 'header.php' ; ?>
<?php
$base_url = "http://tic.sugarcrmdemo.com/rest/v10";
$username = "sereneintegration";
$password = "Sugar123!";

function call(
    $url,
    $oauthtoken='',
    $type='GET',
    $arguments=array(),
    $encodeData=true,
    $returnHeaders=false
)
{
    $type = strtoupper($type);

    if ($type == 'GET')
    {
        $url.= "?" . http_build_query($arguments);
    }
    $curl_request = curl_init($url);

    if ($type == 'POST')
    {
        curl_setopt($curl_request, CURLOPT_POST, 1);
    }
    elseif ($type == 'PUT')
    {
        curl_setopt($curl_request, CURLOPT_CUSTOMREQUEST, "PUT");
    }
    elseif ($type == 'DELETE')
    {
        curl_setopt($curl_request, CURLOPT_CUSTOMREQUEST, "DELETE");
    }
    curl_setopt($curl_request, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
    curl_setopt($curl_request, CURLOPT_HEADER, $returnHeaders);
    curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl_request, CURLOPT_FOLLOWLOCATION, 0);
    if (!empty($oauthtoken))
    {
        $token = array("oauth-token: {$oauthtoken}");
        curl_setopt($curl_request, CURLOPT_HTTPHEADER, $token);
    }
    if (!empty($arguments) && $type !== 'GET')
    {
        if ($encodeData)
        {
            $arguments = json_encode($arguments);
        }
        curl_setopt($curl_request, CURLOPT_POSTFIELDS, $arguments);
    }
    $result = curl_exec($curl_request);
    if ($returnHeaders)
    {
        list($headers, $content) = explode("\r\n\r\n", $result ,2);
        foreach (explode("\r\n",$headers) as $header)
        {
            header($header);
        }
        return trim($content);
    }
    curl_close($curl_request);
    $response = json_decode($result);

    return $response;
}
$url = $base_url . "/oauth2/token";
$oauth2_token_arguments = array(
    "grant_type" => "password",
    "client_id" => "sugar",
    "client_secret" => "",
    "username" => $username,
    "password" => $password,
    "platform" => "base"
);

$oauth2_token_response = call($url, '', 'POST', $oauth2_token_arguments);
$url = $base_url . "/SREV1_Property/48f10d2c-eca2-9163-77fb-56c7677240e2/link/srev1_property_srev1_unit";
     $unit_response = call($url, $oauth2_token_response->access_token, 'GET');

    $json = $unit_response;

    $jd = json_decode(json_encode($json), 1);
        $floors = array();
        foreach ($jd->records AS $key => $obj) {
            $f = $obj->unit_floor;
            $id = $obj->id;
            $name = $obj->name;
            $suite = $obj->suite;
            $sf = $obj->sf;
            $floors[$f][$suite]['name'] = $name;
            $floors[$f][$suite]['id'] = $id;
            $floors[$f][$suite]['sf'] = $sf;
        }
        //sort floors in desc order
        krsort($floors);
        foreach($floors as $id => $floor){
            ksort($floors[$id]);
        }
        print '<table class="data-table" >';
        foreach($floors as $floor => $suites){
            $sqf = 0;
            print '<tr>';
                print '<td>FLOOR: '.$floor.'</td>';
                foreach($suites AS $suite => $value){
                    $sqf += $value['sf'];
                    print'<td>Suite:'.$suite.'<br>SF:'.$value['sf'].'</td>';
                }
                print '<td>'.$sqf.'</td>';
            print '</tr>';
        }
        print '</table>';
    ?>

当我执行此操作时,我收到的错误如“为foreach()提供的无效参数”“试图获取非对象的属性”等等。

1 个答案:

答案 0 :(得分:1)

删除json_decode(),因为您已经收到了正确的JSON stdClass对象,即只需创建它:

......
$unit_response = call($url, $oauth2_token_response->access_token, 'GET');
$jd = $unit_response;
$floors = array();
foreach ($jd->records AS $key => $obj) {
......