使用PHP访问嵌套的JSON

使用PHP访问嵌套的JSON

问题描述:

我创建了大部分,它工作正常。但是这是唯一嵌套的JSON。我如何访问它?我一直在尝试最长的时间,我想我可能会因为我认为这会很简单而导致大脑冻结。使用PHP访问嵌套的JSON

下面是GET从JSON文件所有保留的代码:

GET - Gets all Reservation by Status 
     $app->get('/reservation/:status', function($status) { 
      $dbHandler = new DatabaseHandler(); 
      $dbHandler->connect(); 
      $reservationArray = $dbHandler->runQueryWithOneParam('SELECT * FROM RestaurantDB.Reservation WHERE STATUS = ?', "s", $status); 


      $response = array(); 
      $response["error"] = false; 
      $response["reservations"] = array(); 
      while ($reservation = $reservationArray->fetch_assoc()) { 
       $tmpReservation = array(); 
       $tmpReservation["ID"] = $reservation["ID"]; 
       $tmpReservation["UserName"] = $reservation["UserName"]; 
       $tmpReservation["NoOfPeople"] = $reservation["NoOfPeople"]; 
       $tmpReservation["DateOfReservation"] = $reservation["DateOfReservation"]; 
       $tmpReservation["TimeOfReservation"] = $reservation["TimeOfReservation"]; 
       $tmpReservation["Status"] = $reservation["Status"]; 
       $tmpReservation["TotalAmount"] = $reservation["TotalAmount"]; 
       $tmpReservation["SpecialRequirement"] = $reservation["SpecialRequirement"]; 
       $tmpReservation["Details"] = array(); 

       $reservationDetailArray = $dbHandler->runQueryWithOneParam('SELECT * FROM RestaurantDB.ReservationDetail WHERE ReservationID = ?', "i", $reservation["ID"]); 

       while ($reservationDetail = $reservationDetailArray->fetch_assoc()) { 
        $tmpReservationDetails = array(); 
        $tmpReservationDetails["ItemID"] = $reservationDetail["ItemID"]; 
        $tmpReservationDetails["Quantity"] = $reservationDetail["Quantity"]; 
        $tmpReservationDetails["SubTotal"] = $reservationDetail["SubTotal"]; 
        array_push($tmpReservation["Details"], $tmpReservationDetails); 
       } 

       array_push($response["reservations"], $tmpReservation); 
      } 

      $dbHandler->disconnect(); 

      echoResponse(200, $response); 
     }); 

的JSON显示为..

{ 
    "ID": 5, 
    "UserName": "Coca Cola", 
    "NoOfPeople": 2, 
    "DateOfReservation": "1.79", 
    "TimOfReservation": null, 
    "Status": null, 
    "TotalAmount": null, 
    "SpecialRequirement": 0, 
    "Details": [ 
     { 
      "ID": 1, 
      "ItemID": 3, 
      "Quantity": 2, 
      "SubTotal": "" 
     }, 
     { 
      "ID": 2, 
      "ItemID": 4, 
      "Quantity": 2, 
      "SubTotal": 1.2 
     } 
    ] 
} 

例如我可以使用显示预约状态的$reservation ["Status"]但我似乎不知道如何从

"Details": [ 
     { 
      "ID": 1, 
      "ItemID": 3, 
      "Quantity": 2, 
      "SubTotal": "" 
     }, 

这里是PHP代码..

<?php 
    include ('libs\WsURLs.php'); 
    include ('libs\WsConsumer.php'); 

    $wsConsumer = new WsConsumer(); 

    $_POST = array(); 

    $result = $wsConsumer->executeGET (GET_RESERVATION); 
    $reservations = $result ["reservations"]; 

    // Populating the table  

    foreach ($reservations as $reservation) { 
    echo ('<tr>'); 
    echo ('<td>' . $reservation ["Status"] . '</td>'); 
    echo ('</tr>'); 
?> 
+0

你解决了你的问题吗? – 2015-05-01 18:52:37

$reservation["Details"]是数组,则访问数组元素:

$reservation["Details"][$i]["ItemID"] 

是在保留第i个项目的项目ID。

您可以遍历预订详情

foreach($reservation ["Details"] as $key=>value) 

看到这个例子中,你可以去通过阵列,并提取值:

<?php 


$json = '{ 
    "ID": 5, 
    "UserName": "Coca Cola", 
    "NoOfPeople": 2, 
    "DateOfReservation": "1.79", 
    "TimOfReservation": null, 
    "Status": null, 
    "TotalAmount": null, 
    "SpecialRequirement": 0, 
    "Details": [ 
     { 
      "ID": 1, 
      "ItemID": 3, 
      "Quantity": 2, 
      "SubTotal": "" 
     }, 
     { 
      "ID": 2, 
      "ItemID": 4, 
      "Quantity": 2, 
      "SubTotal": 1.2 
     } 
    ] 
}'; 

$data = json_decode($json, true); 

for($i = 0; $i < count($data['Details']); $i++) { 

    echo '<p>'; 

    foreach($data['Details'][$i] as $key => $value) { 
     echo $key . ' -> ' . $value . '<br>';  
    }  

    echo '</p>'; 
}  

你的情况,你可以这样做:

$id_search = 2; 

    foreach ($reservations as $reservation) { 
    for($i = 0; $i < count($reservation['Details']); $i++) { 

if($id_search == $reservation['Details'][$i]['ID']) { 

      echo '<p>'; 

      foreach($reservation['Details'][$i] as $key => $value) { 
       echo $key . ' -> ' . $value . '<br>';  
      }  

      echo '</p>'; 
} 

    }  
    } 
+0

这真是太棒了。它设法检索所有reservationId的数据!但是,我只想接收与特定reservationId匹配的数据。我有一个表格行,其中每个reservationId旁边都有一个按钮。我需要它仅返回与该reservationId相关的数据。这有任何意义吗? – user3081458 2015-03-31 05:39:03

+0

@ user3081458如果您看到第二个代码,它将仅检索id = 2的预留。如果我的答案解决了您的问题,请记住您可以将其检查为已接受。如果你不知道你是如何阅读这个http://stackoverflow.com/tourn – 2015-04-05 03:49:54

+0

@ user3081458你有什么进展? – 2015-04-07 17:30:27