2013-10-02 132 views
2

我必須編寫腳本來讀取JSON文件,該文件將包含有關數據管道的信息 - 主要包括三個組件 - 狀態,註釋和時間戳。一旦我以JSON讀取文件,我需要爲所有三個組件輸出相應數據管道的輸出。輸出會是這個樣子如下:閱讀json文件並使用PHP腳本打印輸出

名稱:阿波羅 狀態:待 評論:月報 時間戳: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特別陌生....你能讓我知道在這個腳本中我錯過了什麼以獲得所需的輸出或我在哪裏出錯?

+1

什麼實際上是你遇到的問題?你有錯誤嗎? –

回答

3

我認爲問題是,你的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; 
     } 

} 
+0

嘿...這工作對我...謝謝.... – rond

+0

$ json = json_decode($ t,TRUE);不是$ t,而是$ data –

+0

@DilDilshan感謝您的糾正 – RiggsFolly

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/>'; 
     } 
    } 
}