3

我必须编写一个脚本来读取一个 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 尤其陌生....您能否让我知道我在此脚本中缺少什么以获得所需的输出或我哪里出错了?

4

2 回答 2

4

我认为问题在于您的 json 数据生成器有一个小错误

试试这个,数组中的字段名称必须是文本文字,而您忘记将名称用引号引起来

<?php
    $data = array(
             "name" => "Apollo",
             "cob"  => array(
                          'status'    => "completed",
                          'comment'   => "Monthly report",
                          'timestamp' => "00:00"
                         )
              );

    echo json_encode($data);
?>

现在读取数据的代码需要遍历第一个数组,然后使用内部数组$value地址的变量从内部数组中获取它感兴趣的位。我假设实际数据包含比您的示例代码更多的字段,所以我使用了 aswitchif如果它不那么复杂的话会这样做

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

}
于 2013-10-02T22:51:19.433 回答
2

尝试:

$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/>';
        }
    }
}
于 2014-06-11T05:57:56.843 回答