遇到json_decode问题

时间:2017-10-24 21:40:50

标签: php json

由于某种原因,我似乎无法获得json_decode来提取我需要的ID。也许我在这段代码中有语法错误?否则代码有效。如果我在两个API调用之间手动提供id,则它会成功完成。此外,我还没有真正能够轻松调试这个,因为我使用ajax和html按钮调用这个PHP函数,我根本不知道Ajax,所以我不知道如何在PHP代码中打印调试回显消息,因为我通常会看到我遇到麻烦的地方。所以基本上我正在对这个盲人进行故障排除。

基本上,代码执行初始API调用以查找标记为“VMTAG”的VM。 API调用返回该VM的JSON信息。我用json_decode提取ID,然后我做第二次API调用,使用该ID关闭VM。

function shutdown() {
    $ch = curl_init('https://api.digitalocean.com/v2/droplets?tag_name=VMTAG');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Authorization: Bearer TOKENHIDDEN',
        'Content-Type: application/json')
    );
    $json = curl_exec($ch);
    $object = json_decode($json);
    $id = $object['id'];
    $data = array("type" => "shutdown");
    $data_string = json_encode($data);
    $ch = curl_init('https://api.digitalocean.com/v2/droplets/' . $id . '/actions');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Authorization: Bearer TOKENHIDDEN',
        'Content-Type: application/json',
        'Content-Length: ' . strlen($data_string))
    );
    $result = curl_exec($ch);
    exit;
} 

1 个答案:

答案 0 :(得分:0)

你有

$object = json_decode($json); // this gives a stdClass
$id = $object['id'];          // you are using $object as an assoc. array

代替,

$object = json_decode($json,true); // now you have an assoc array and 
$id = $object['id'];               // $id should now be defined

查看json_decode的文档:

http://php.net/manual/en/function.json-decode.php