2015-09-28 74 views
0

您好我有一個腳本,它獲取數組中的JSON輸出,但我只想提取名稱字段。它是一個非常實用的HostBill API,我只想打印域頂級域名。我嘗試了所有的辦法,但我收到此錯誤 注意:試圖讓非對象的屬性在C:\ XAMPP \ htdocs中\ hostbill \檢查\的index.php上線22從JSON中提取在線特定值

我不知道代碼有什麼問題。

我需要的輸出是: 產品名稱:「.com」; 它來源於此JSON,因爲這 「名」: 「.COM」,

我的PHP代碼:

<?php 
    $url = 'http://localhost/hostbill/admin/api.php'; 
    $post = array(
     'api_id' => '4c76ed9e1d48cc4f5d56', 
     'api_key' => '2056c9b03cc95ce625b1', 
     'call' => 'getProducts', 
     'id'=>1 
    ); 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    $return = json_decode($data, true); 
    print_r($return); 
    $product_name = $return->name; 
    echo "Product Name: ".$product_name; 
?> 

Hostbill JSON響應示例:

{ 
     "success": true, 
     "products": { 
     "236": { 
      "id": "236", 
      "type": "9", 
      "name": "VPS-1024-w-sliders", 
      "stock": "0", 
      "paytype": "Free", 
      "description": "", 
      "m_setup": "0.00", 
      "q_setup": "0.00", 
      "s_setup": "0.00", 
      "a_setup": "0.00", 
      "b_setup": "0.00", 
      "t_setup": "0.00", 
      "d_setup": "0.00", 
      "w_setup": "0.00", 
      "h_setup": "0.00", 
      "m": "30.00", 
      "q": "0.00", 
      "a": "0.00", 
      "s": "0.00", 
      "b": "0.00", 
      "t": "0.00", 
      "d": "0.00", 
      "w": "0.00", 
      "h": "0.00", 
      "qty": "0", 
      "visible": "1", 
      "ptype": "onappcloud", 
      "accounts": "1" 
     }, 
     "235": { 
      "id": "235", 
      "type": "9", 
      "name": "VPS-512-w-sliders", 
      "stock": "0", 
      "paytype": "Regular", 
      "description": "", 
      "m_setup": "0.00", 
      "q_setup": "0.00", 
      "s_setup": "0.00", 
      "a_setup": "0.00", 
      "b_setup": "0.00", 
      "t_setup": "0.00", 
      "d_setup": "0.00", 
      "w_setup": "0.00", 
      "h_setup": "0.00", 
      "m": "20.00", 
      "q": "0.00", 
      "a": "0.00", 
      "s": "0.00", 
      "b": "0.00", 
      "t": "0.00", 
      "d": "0.00", 
      "w": "0.00", 
      "h": "0.00", 
      "qty": "0", 
      "visible": "1", 
      "ptype": "onappcloud", 
      "accounts": "3" 
     } 
     }, 
     "call": "getProducts", 
     "server_time": 1317712858 
    } 
+0

什麼是'的print_r($返程)輸出;'? – aldrin27

+0

可能的重複[如何從JSON提取數據與PHP?](http://stackoverflow.com/questions/29308898/how-do-i-extract-data-from-json-with-php) –

回答

0

產品均array ,因此請使用foreach遍歷所有產品。

foreach($return['products'] AS $product){ 
    echo "Product Name: ".$product['name']; 
} 

您還應該檢查API響應是否有效。如果API不響應數組產品或響應空的響應,則會出錯。這將做到這一點。

if(isset($return['products']) && is_array($return['products'])){ 
    foreach($return['products'] AS $product){ 
     echo "Product Name: ".$product['name']; 
    } 
} 

提取特定的類別

爲了讓只有特定的產品,只要使用if聲明。例如將產品從category_id1type9

foreach($return['products'] AS $product){ 
    if($product['category_id'] == 1 && $product['type'] == 9){ 
     echo "Product Name: ".$product['name']; 
    } 
} 
+0

它的工作原理但只能從特定類別提取嗎?在JSON中有兩個字段1是type,第二個是category_id –

+0

是的。看到我編輯的答案。 –

+0

注意:第22行的C:\ xampp \ htdocs \ hostbill \ check \ index.php中的未定義索引:category_id –

0

你會得到錯誤,因爲它不是一個對象。這是一個數組。

所以它應該是:

foreach($return['products'] as $key => $product){ 
    echo "Product Name: ". $product['name']; 
}