所以我得到了一个带有按钮的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