在PHP中格式化JSON格式的文本文件

时间:2016-09-26 21:14:07

标签: php json ajax

所以我得到了一个带有按钮的HTML页面。当我单击按钮时,一个单独的javascript文件向我的PHP文件发送一个GET请求,期望返回一个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);

}
}
 ?>

我的moist.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;
}

2 个答案:

答案 0 :(得分:1)

所以我设法自己解决了。基本上文本文件的格式是错误的,正如一些评论员所说,如果我自己做的话,我不需要编码。我最终做的是在我的应用程序中生成日志文件以在每行之后添加逗号。然后在我的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;
}

答案 1 :(得分:1)

你不能将两个+ JSON字符串连接起来。它是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编码的整数并且卡在一起,你会得到一个新的&#34;整数:

 42123

并且在接收端,您将要去&#34;好的,那么两者之间的区别在哪里,因为42123同样有效可能的原始值为42123

将两个整数作为distinct和SEPARATABLE值发送将需要一个数组:

[42,123]