使用PHP解析JSON文件
我得到了一个需要解析的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文件的一个示例(它只是文件的一部分,但您将从这个示例中了解它是如何工作的): 我迄今
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>