Форматирование текстового файла в формате JSON в PHP

Поэтому я получил HTML-страницу с кнопкой. Когда я нажимаю кнопку, отдельный файл javascript отправляет запрос GET в мой PHP-файл, ожидая возвращения объекта JSON. Мой PHP читает текстовый файл в формате JSON и должен преобразовать его в JSONObject и повторить его для моего javascipt. Раньше у меня был какой-то код, но он больше не работает, поскольку я изменил его на Ajax aproach, вместо того, чтобы иметь все в одном файле. Это мой код:

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; } 

Поэтому мне удалось решить это сам. В основном форматирование текстового файла было неправильным, и, как говорили некоторые комментаторы, мне не нужно его кодировать, если я делаю это сам. То, что я закончил, было в моем приложении, которое генерирует файл журнала для добавления запятой после каждой строки. Затем в моем PHP я добавил скобки и удалил последнюю запятую.

 function getLog(){ header('Content-Type: application/json'); $file = file_get_contents('../../../home/shares/flower_hum/humid.log'); $lengthOfFile = strlen($file)-2; $subFile = substr($file, 0, $lengthOfFile); $res ="["; $res .= $subFile; $res .="]"; echo $res; } 

Вы не можете просто замять две строки JSON togther. Это JSON, что означает, что он должен быть синтаксически правильным Javascript CODE . Если вы хотите объединить две строки json вместе, вы должны их декодировать в собственную структуру данных, объединить эти структуры вместе, а затем перекодировать новую объединенную структуру:

 $temp1 = json_decode('{"foo":"bar"}', true); $temp2 = json_decode('{"baz":"qux"}', true); $new = array_merge($temp1, $temp2); echo json_encode($new); 

который будет производить:

 {"foo":"bar","baz":"qux"} 

и остаются в силе JSON / Javascript.

Зачем? Предположим, что искомые целые числа действительны json:

 json_encode(42) -> 42 json_encode(123) -> 123 

Если у вас есть два json-encoded integers и jam вместе, вы получаете «новое» целое число:

  42123 

и на принимающей стороне вы будете «Хорошо, так где же раскол между двумя», потому что 4 и 2123 являются столь же допустимыми, насколько это возможно, исходными значениями 4212 и 3 .

Отправка двух целых чисел в виде отдельных и разделяемых значений потребует массив:

 [42,123]