So bekam ich eine HTML-Seite mit einer Schaltfläche. Wenn ich auf die Schaltfläche klicke, sendet eine separate Javascript-Datei eine GET-Anfrage an meine PHP-Datei und erwartet dafür ein JSON-Objekt. Mein PHP liest eine JSON-formatierte Textdatei und sollte sie in ein JSONObject konvertieren und für mein Javascipt ausgeben. Ich hatte etwas Code, der vorher arbeitete, aber es scheint es nicht mehr zu tun, seit ich zu einem Ajax-Ansatz gewechselt habe, anstatt alles in der gleichen Datei zu haben. Dies ist mein Code:Formatieren von JSON formatierte Textdatei in PHP
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);
}
}
?>
Meine humid.log Datei sieht wie folgt aus:
{"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" }
Jetzt Wenn ich meine Taste drücken, das ist die Antwort, die ich bekommen Überprüfung der Konsole in meinem Webbrowser:
Antwort:
["{\"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"
offensichtlich etwas falsch mit der Formatierung, aber ich weiß nicht, was. Wie gesagt, dieser Code hat gut funktioniert, als ich meinen PHP und HTML in der gleichen Datei hatte.
EDIT:
Ich habe auch versucht, die JSON mit so etwas Formatierung, aber es druckt nur die Klammern:
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;
}
Können Sie Ihre HTML veröffentlichen, die auch die AJAX JS enthält? – Ma3x
Es sieht so aus, als ob Sie 'json_encode()' in 'feuchte.log', das ist bereits JSON, enthalten sind und es ausdrucken (Sie kodieren bereits kodierte Daten). Ich sollte jedoch darauf hinweisen, dass die oben genannten "feuchte.log" Inhalte nicht gültig sind JSON. Wenn es sich um ein Array von Objekten handelt, sollten diese durch ein Komma getrennt und in Klammern eingeschlossen werden ('[{obj_1}, {obj_2}]'). –
Ich denke, ein Teil des Problems besteht auch darin, dass Sie "$ logLines" anstelle von "$ entries" oder "$ finalOutput" codieren. – Ma3x