读取 json 文件并使用 PHP 脚本打印输出


Read a json file and print output using a PHP script

我必须编写一个脚本来读取一个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/>';
        }
    }
}