Parsing a JSON file using PHP

I am provided with a JSON file that I need to parse. I do some work for the hotel, and the ultimate goal is to create a table that lists:

Room Number
Adult Content (enabled or disabled)
Room Charges (enabled or disabled)
Status (occupied or unoccupied)

In the JSON file, I do not control. I was given, and from there I need to create the layout noted above.

This is an example of the JSON file I am giving (this is only part of the file, but you will understand how it works from this example):

{
   "apiVersion" : "0.1",
   "data" : {
      "roomCount" : 105,
      "rooms" : [
         {
            "room_number" : "104",
            "services" : [
               {
                  "adult" : {
                     "enabled" : true
                  },
                  "room_charges" : {
                     "enabled" : true
                  }
               }
            ],
            "status" : "OCCUPIED"
         },
         {
            "room_number" : "105",
            "services" : [
               {
                  "adult" : {
                     "enabled" : true
                  },
                  "room_charges" : {
                     "enabled" : false
                  }
               }
            ],
            "status" : "OCCUPIED"
         },
         {
            "room_number" : "106",
            "services" : [
               {
                  "adult" : {
                     "enabled" : false
                  },
                  "room_charges" : {
                     "enabled" : true
                  }
               }
            ],
            "status" : "OCCUPIED"
         },
         {
            "room_number" : "107",
            "services" : [
               {
                  "adult" : {
                     "enabled" : false
                  },
                  "room_charges" : {
                     "enabled" : false
                  }
               }
            ],
            "status" : "OCCUPIED"

What i have done so far:

I tried to parse the data, and I can get the data to display, however, I am having problems installing it exactly the way I need to look like the one above. Currently, my script syntax prints this:

data
roomCount: 105 

rooms
0
room_number: 104 

services
0
adult
enabled: 1 

room_charges
enabled: 1 

status: OCCUPIED 

, "". , , :

Room Number: 104 
Adult: Enabled or Disabled (depending on true or false) 
Room Charges: Enabled or Disabled (depending on true or false)
Status: OCCUPIED or UNOCCUPIED

, , , :

<?php
$string = file_get_contents("test.json");
$jsonIterator = new RecursiveIteratorIterator(
    new RecursiveArrayIterator(json_decode($string, TRUE)),
    RecursiveIteratorIterator::SELF_FIRST);

foreach ($jsonIterator as $key => $val) {
    if(is_array($val)) {
        echo "<br> $key";
    } else {
        echo "<br> $key: $val <br>";
    }
}

?>

. - /, .

+4
3

json Object

$arr = json_decode($jsonString);
$out = "";
foreach ($arr->data->rooms as $k => $v) {
    $adult = $v->services[0]->adult->enabled == 'true' ? 'Enabled' : 'Disabled';
    $room = $v->services[0]->room_charges->enabled == 'true' ? 'Enabled' : 'Disabled';
    $out .="Room Number: $v->room_number\n";

    $out .="Adult: $adult\n";
    $out .="Room Charges: $room\n";
    $out .="Status: $v->status\n";
    $out .= "----\n";
}
echo $out;

Room Number: 104
Adult: Enabled
Room Charges: Enabled
Status: OCCUPIED
----
Room Number: 105
Adult: Enabled
Room Charges: Disabled
Status: OCCUPIED
----
Room Number: 106
Adult: Disabled
Room Charges: Enabled
Status: OCCUPIED
----
+2

, :

$jsonIterator = new RecursiveIteratorIterator(
    new RecursiveArrayIterator(json_decode($json, TRUE)),
    RecursiveIteratorIterator::SELF_FIRST);

foreach ($jsonIterator as $key=>$value) {
    if($key === 'room_number') {
        echo "Room Number: " . $value . "<br />";
    }
    if($key === 'adult') {
        echo "Adult: " . $value['enabled'] . "<br />";
    }
    if($key === 'status') {
        echo "status: " . $value . "<br />";
    }
}
+1

For illustrative purposes, you can simply use a table or list of descriptions in this case. The user interface is up to you:

<?php

$response = '{ "apiVersion": "0.1", "data": { "roomCount": 105, "rooms": [ { "room_number": "104", "services": [ { "adult": { "enabled": true }, "room_charges": { "enabled": true } } ], "status": "OCCUPIED" }, { "room_number": "105", "services": [ { "adult": { "enabled": true }, "room_charges": { "enabled": false } } ], "status": "OCCUPIED" }, { "room_number": "106", "services": [ { "adult": { "enabled": false }, "room_charges": { "enabled": true } } ], "status": "OCCUPIED" }, { "room_number": "107", "services": [ { "adult": { "enabled": false }, "room_charges": { "enabled": false } } ], "status": "OCCUPIED" } ] }}';
$data = json_decode($response, true);

?>

<style type="text/css">/*DL, DT, DD TAGS LIST DATA*/dl { margin-bottom:50px;} dl dt { background:#5f9be3; color:#fff; float:left; font-weight:bold; margin-right:10px; padding:5px; width:150px; } dl dd { margin:2px 0; padding:5px 0;}</style>
<dl>
<?php foreach($data['data']['rooms'] as $info): ?>
    <dt>Room Number: </dt>
    <dd><?php echo $info['room_number']; ?></dd>
    <?php $services = reset($info['services']); ?>
    <dt>Adult: </dt>
    <dd><?php echo ($services['adult']['enabled'] == 1) ? 'ENABLED' : 'DISABLED'; ?></dd>
    <dt>Room Charges: </dt>
    <dd><?php echo ($services['room_charges']['enabled'] == 1) ? 'ENABLED' : 'DISABLED'; ?></dd>
    <dt>Status: </dt>
    <dd><?php echo $info['status']; ?></dd><br/>
<?php endforeach; ?>
</dl>
+1
source

All Articles