Итак, я получил приложение, печатающее следующий журнал:
{"date":"15/09/2016", "time":"09:29:58","temp":"17.0", "humidity":"95.0" },
{"date":"15/09/2016", "time":"09:30:01","temp":"17.0", "humidity":"95.0" },
{"date":"15/09/2016", "time":"09:30:03","temp":"17.0", "humidity":"95.0" },
И с помощью PHP я читаю и печатаю вот так, и это прекрасно работает:
<?php
$logFile = file_get_contents( "../../../home/shares/flower_hum/humid.log" );
echo $logFile;
?>
Теперь я хочу преобразовать это в объект JSON, но если вы заметили, мне не хватает некоторых скобок, чтобы он был действительным. Мне нужно удалить последний знак запятой и добавить несколько скобок, что-то вроде этого:
<?php
$logFile = file_get_contents( "../../../home/shares/flower_hum/humid.log" );
$stringLength = strlen($logFile)-2; //Get the length of the log
$logFile = substr($logFile, 0,$stringLength); //Removes the last comma.
$logFile = '{"log":[' . $logFile . ']}'; //Add brackets
echo $logFile; //Print result
$json = json_decode($logFile, true); //create JSON Object
?>
Проблема заключается в том, что всякий раз, когда я пытаюсь добавить строку в переменную $ logFile, php выдает ошибку (я не знаю, какая неудача). Я могу объединить «нормальные» строки, такие как «Hello». «Мир» просто отлично, поэтому он должен что-то делать с методом get_file_contens. Но то, что я могу найти, должно вернуть простую строку.
Мой окончательный вывод, который я хочу, должен быть таким:
{"log":[
{"date":"15/09/2016", "time":"09:29:58","temp":"17.0","humidity":"95.0" },
{"date":"15/09/2016", "time":"09:30:01","temp":"17.0", "humidity":"95.0" },
{"date":"15/09/2016", "time":"09:30:03","temp":"17.0", "humidity":"95.0" }
]}
Я мог бы добавить, что я запускаю это на сервере Apache, работающем на моем Raspberry Pi, но я установил PHP, и некоторые вещи работают, поэтому я не думаю, что это как-то связано с этим.
Вы можете достичь этого с помощью trim
удалить переводы строк, rtrim
чтобы избавиться от запятых в array_map
Перезвоните.
И некоторые взад и вперед json_decode
а также json_encode
Увидеть ниже
<?php
$logLines = file('logfile.txt');
$entries = array_map("clean",$logLines);
$finalOutput = [
'log' => $entries
];
print json_encode($finalOutput, JSON_UNESCAPED_SLASHES);
// add the flag so the slashes in the dates won't be escaped
function clean($string){
return json_decode(rtrim(trim($string),','),true);
}
Это будет выводить
{"log":[{"date":"15/09/2016","time":"09:29:58","temp":"17.0","humidity":"95.0"},{"date":"15/09/2016","time":"09:30:01","temp":"17.0","humidity":"95.0"},{"date":"15/09/2016","time":"09:30:03","temp":"17.0","humidity":"95.0"}]}
Других решений пока нет …