Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP解析JSON文件_Php_Arrays_Json - Fatal编程技术网

使用PHP解析JSON文件

使用PHP解析JSON文件,php,arrays,json,Php,Arrays,Json,我得到了一个需要解析的JSON文件。我正在为一家酒店做一些工作,最终目标是建立一个表,列出: Room Number Adult Content (enabled or disabled) Room Charges (enabled or disabled) Status (occupied or unoccupied) JSON文件,我无法控制。它是给我的,从那里我必须创建上面提到的布局 这是我收到的JSON文件的一个示例(它只是文件的一部分,但您将从这个示例中了解它是如何工作的): 我迄今

我得到了一个需要解析的JSON文件。我正在为一家酒店做一些工作,最终目标是建立一个表,列出:

Room Number
Adult Content (enabled or disabled)
Room Charges (enabled or disabled)
Status (occupied or unoccupied)
JSON文件,我无法控制。它是给我的,从那里我必须创建上面提到的布局

这是我收到的JSON文件的一个示例(它只是文件的一部分,但您将从这个示例中了解它是如何工作的):

我迄今为止所做的:

我已经尝试解析数据,并且我可以让数据显示出来,但是,我很难按照上面所述的方式准确地显示它。当前,我的解析脚本输出以下内容:

data
roomCount: 105 

rooms
0
room_number: 104 

services
0
adult
enabled: 1 

room_charges
enabled: 1 

status: OCCUPIED 
我需要它不显示嵌套数组的键“Services”。正如我上面所说,我希望输出如下所示:

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>";
    }
}

?>


我正在寻找以更干净的方式输出数据的一些改进。如果您能帮助我或给我任何建议/建议,我将不胜感激。

这里是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
----

基本上,您只需检查键和值是否已设置:

$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 />";
    }
}
$jsonIterator=新的递归迭代器(
新的递归ArrayIterator(json_decode($json,TRUE)),
递归迭代器::SELF_优先);
foreach($jsonIterator作为$key=>$value){
如果($key==“房间号”){
回显“房间号:”.$value.“
”; } 如果($key==‘成人’){ 回显“成人:”.$value['enabled'].“
”; } 如果($key=='status'){ 回显“状态:.”值“
”; } }
为了便于说明,您可以在本案例中使用表格或描述列表。用户界面由您决定:

<?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>

/*DL,DT,DD标签列表数据*/DL{margin bottom:50px;}DL DT{background:#5f9be3;color:#fff;float:left;font-weight:bold;margin-right:10px;padding:5px;width:150px;}DL{DD DD DD margin:2px 0;padding:5px 0;}
房间号码:
成人:
房费:
地位:


一个文件的大小是多少。那么这里有什么问题呢?这个文件有1478行代码。37kb。我正在寻求有关输出的帮助。我需要它来反映我在问题中的解释,以一种干净整洁的用户友好的方式。谢谢!这正是我所需要的,输出是完美的。
<?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>