2015-09-28 4 views
0

Здравствуйте, у меня есть скрипт, который получает вывод JSON в массиве, но я хочу извлечь только поле имени. Это acutally 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']; 
    } 
} 

Extract только конкретная категория

Чтобы получить только определенные продукты, просто использовать if заявления. Например, чтобы получить продукты из category_id1 и type9:

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

Работает но можно ли извлекать только из определенной категории? в JSON есть два поля: 1 - тип, а второй - category_id –

+0

Да. См. Мой отредактированный ответ. –

+0

Примечание: Неопределенный индекс: category_id в C: \ xampp \ htdocs \ hostbill \ check \ index.php в строке 22 –

0

Вы получите эту ошибку, потому что это не является объектом. Это массив.

Так оно и должно быть:

foreach($return['products'] as $key => $product){ 
    echo "Product Name: ". $product['name']; 
} 
Смежные вопросы