【问题标题】:Accessing nested JSON using PHP使用 PHP 访问嵌套的 JSON
【发布时间】:2015-03-31 20:34:23
【问题描述】:

我已经创建了大部分并且运行良好。但这是唯一嵌套的 JSON。我如何访问它?我已经尝试了很长时间,我想我可能会大脑冻结,因为我认为它会如此简单。

这是从 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>');
?>

【问题讨论】:

  • 你的问题解决了吗?

标签: php html json web-services


【解决方案1】:

$reservation["Details"]是一个数组,你访问数组元素:

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

是预订中第 i 个项目的项目 ID。

【讨论】:

    【解决方案2】:

    您可以循环浏览预订详情

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

    【讨论】:

      【解决方案3】:

      看这个例子,你可以遍历数组并提取值:

      <?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>';
      }
      
         }     
          }
      

      【讨论】:

      • 哥们太棒了。它设法检索所有reservationId 的数据!但是我只想接收与特定 reservationId 匹配的数据。我有一个表格行,其中每个 reservationId 旁边都有一个按钮。我只需要带回与该 reservationId 相关的数据。这有意义吗?
      • @user3081458 如果您看到第二个代码,它只会检索 id = 2 的预订。如果我的回答解决了您的问题,请记住您可以将其检查为已接受。如果你不知道怎么做,你可以阅读这个stackoverflow.com/tour
      • @user3081458 你有预付款吗?
      猜你喜欢
      • 1970-01-01
      • 2019-01-24
      • 2013-11-18
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      相关资源
      最近更新 更多