我必须编写一个脚本来读取一个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特别陌生....你能不能让我知道我在这个脚本中错过了什么来获得所需的输出或我在哪里出错?
答案 0 :(得分:4)
我认为问题是你的json数据生成器有一个小错误
尝试这样做,数组中的字段名称必须是文本文字,而您忘记将名称包装在引号中
<?php
$data = array(
"name" => "Apollo",
"cob" => array(
'status' => "completed",
'comment' => "Monthly report",
'timestamp' => "00:00"
)
);
echo json_encode($data);
?>
现在,读取数据的代码需要遍历第一个数组,然后使用$value
变量从内部数组中获取它感兴趣的位,该变量是内部数组的地址。我假设实际数据包含的字段多于示例代码,因此我使用了switch
但if
如果不那么复杂就会做{/ p>}
<?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;
}
}
答案 1 :(得分:3)
尝试:
$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/>';
}
}
}