我必须编写一个脚本来读取一个JSON文件,该文件将包含有关数据管道的信息 - 主要是三个组件 - 状态,注释和时间戳。读取 JSON 格式的文件后,我需要打印出包含所有三个组件的相应数据管道的输出。输出如下所示:
姓名:阿波罗状态:待定评论:月度报告时间戳:00:00
我有以下脚本来生成 JSON 文件:
<?php
$data = array(
"name"=>"Apollo",
"cob"=> array(
status=> "completed",
comment=> "Monthly report",
timestamp=> "00:00"
),
);
header('Content-Type: application/json');
echo json_encode($data);
?>
我有以下脚本来读取生成的 JSON 文件并打印上述所需的输出:
<?php
$data = file_get_contents ('./cob_details.json');
$json = json_decode($data, true);
echo ('<pre>');
print_r ($json);
echo ('</pre>');
echo ('<br>output:</br>');
foreach ($json as $key => $value)
{
echo "Name: $value Status: $value]<br />";
}
?>
我对JSON和PHP特别陌生。您能否让我知道我在此脚本中缺少什么以获得所需的输出,或者我哪里出错了?
我认为
问题是您的 json 数据生成器有一个小错误
试试这个,数组中的字段名称必须是文本文字,你忘了用引号括起来
<?php
$data = array(
"name" => "Apollo",
"cob" => array(
'status' => "completed",
'comment' => "Monthly report",
'timestamp' => "00:00"
)
);
echo json_encode($data);
?>
现在,读取数据的代码需要遍历第一个数组,然后使用 $value
变量(内部数组的地址)从内部数组中获取它感兴趣的位。我假设实际数据包含的字段比您的示例代码多,所以我使用了一个switch
但如果它不是那么复杂,if
就可以了
<?php
$data = file_get_contents ('./cob_details.json');
$json = json_decode($data, TRUE);
echo ('<pre> print the json ');
print_r ($json);
echo ('</pre>');
echo '<br>output:</br>';
foreach ($json as $key => $value)
{
switch ( $key ) {
case 'name' :
echo "Name: $value";
break;
case 'cob' :
echo ' Status: ' . $value['status'] . ']<br />';
break;
case 'another field' :
// and so on
break;
}
}
尝试:
$data = file_get_contents ('./cob_details.json');
$json = json_decode($data, true);
foreach ($json as $key => $value) {
if (!is_array($value)) {
echo $key . '=>' . $value . '<br/>';
} else {
foreach ($value as $key => $val) {
echo $key . '=>' . $val . '<br/>';
}
}
}