所以我得到了一個帶有按鈕的HTML頁面。當我點擊按鈕時,一個單獨的javascript文件向我的PHP文件發送一個GET請求,期待返回一個JSON對象。我的PHP讀取JSON格式的文本文件,並將其轉換爲JSONObject並將其回送給我的javascipt。我之前有一些代碼可以工作,但是由於我改爲使用Ajax方法,而不是將所有內容都放在同一個文件中,所以它似乎不再適用。這是我的代碼:在PHP中格式化JSON格式的文本文件
readLog.php
<?php
class test{
function clean($string){
return json_decode(rtrim(trim($string),','),true);
}
function getLog(){
header('Content-Type: application/json');
$logLines = file('../../../home/shares/flower_hum/humid.log');
$entries = array_map("clean",$logLines);
$finalOutput = ['log' => $entries];
echo json_encode($logLines);
}
}
?>
我humid.log文件看起來像這樣:
{"date":"26/09/2016", "time":"22:40:46","temp":"16.0", "humidity":"71.0" }
{"date":"26/09/2016", "time":"23:10:47","temp":"16.0", "humidity":"71.0" }
現在,如果我按下按鈕,這是我得到的迴應檢查控制檯在網頁瀏覽器:
響應:
["{\"date\":\"26\/09\/2016\", \"time\":\"22:40:46\",\"temp\":\"16.0\", \"humidity\":\"71.0\" }{\"date\":\"26\/09\/2016\", \"time\":\"23:10:47\",\"temp\":\"16.0\", \"humidity\":\"71.0\" }\n"]
JSON:
"{"date":"26/09/2016", "time":"22:40:46","temp":"16.0", "humidity":"71.0" }{"date":"26/09/2016", "time":"23:10:47","temp":"16.0", "humidity":"71.0" }\n"
明顯的事情是錯誤的格式,但我不知道是什麼。正如我所說的,當我的php和HTML在同一個文件中時,這段代碼工作得很好。
編輯:
我也曾嘗試用這樣的格式化JSON,但它只是打印托架:
function getLog(){
$text = file('../../../home/shares/flower_hum/humid.log');
$textRemoved ="["; //Add opening bracket.
$textRemoved .= substr($text, 0, strlen($text)-1); (Remove last comma)
$textRemoved .="]";//Add closing bracket
$json = json_encode($textRemoved);
echo $json;
}
您可以發佈您的HTML包含AJAX JS呢? – Ma3x
它看起來就像'json_encode()'''humid.log',它已經是JSON,並且打印出它(你正在編碼已經編碼的數據)。儘管我應該指出上面發佈的'humid.log'內容不是有效的JSON。如果它是一個對象數組,它們應該用逗號分隔並用方括號('[{obj_1},{obj_2}]')封裝。 –
我認爲問題的一部分還在於你正在編碼'$ logLines'而不是'$ entries'或'$ finalOutput'。 – Ma3x