json — Невозможно объединить строку с другой строкой, полученной file_get_contens в переполнении стека

Итак, я получил приложение, печатающее следующий журнал:

{"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, и некоторые вещи работают, поэтому я не думаю, что это как-то связано с этим.

1

Решение

Вы можете достичь этого с помощью 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"}]}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]