PHP json_编码错误:最后一条记录为空
我试图用ajax读取一个文件,但是我得到了一个arror SyntaxError:JSON.parse:在JSON数据第1行第48列的JSON数据之后出现意外的非空白字符 因为在检查时,我总是以PHP json_编码错误:最后一条记录为空,php,jquery,json,ajax,Php,Jquery,Json,Ajax,我试图用ajax读取一个文件,但是我得到了一个arror SyntaxError:JSON.parse:在JSON数据第1行第48列的JSON数据之后出现意外的非空白字符 因为在检查时,我总是以“作为最后一条记录结束 以下是test.txt文件: one two three 以下是我的ajax调用: $.ajax( { url: 'control.php', type: "post", dataType: "json",
“
作为最后一条记录结束
以下是test.txt
文件:
one
two
three
以下是我的ajax调用:
$.ajax( {
url: 'control.php',
type: "post",
dataType: "json",
data: details,
success: function(data, textStatus) {
$("#whitelist").append(data[0])
},
complete: function(jqXHR, responseText) {
// alert('complete')
},
error: function(jqXHR, textStatus, errorThrown) {
alert('error');
// var responseText = jQuery.parseJSON(jqXHR.responseText);
console.log(errorThrown);
}
});
这里是control.php
,它读取文件并假定发送一个json编码的数组:
$path = "test.txt";
$file = fopen($path, 'r');
$data = fread($file, filesize($path));
fclose($file);
$lines = explode(PHP_EOL,$data);
error_log('Lines: ' . json_encode($lines, JSON_FORCE_OBJECT) . "err: " . json_last_error());
error_log('Lines: ' . serialize($lines));
echo json_encode($lines, JSON_FORCE_OBJECT);
以下是错误日志()
输出:
Lines: {"0":"one","1":"two","2":"three","3":""} json_last_error: 0
以下是firebug的输出:
{"0":"one","1":"two","2":"three","3":""}{"error":"Error","message":[]}
已经好几个小时了!!这个“
到底是从哪里来的?还有,为什么json\u last\u error()
毫无帮助?为什么构建一个简单的json数组如此困难
我显然做错了什么。请带我到灯光前,我已经筋疲力尽了。请在control.php after error.log中尝试下面的代码好吗
$lines=array\u slice($lines,0,count($lines)-1);
echo json_encode($lines,json_FORCE_OBJECT)代码>由于您正在将文件的全部内容读入内存,因此有一种更简单的方法可以按换行/换行将其拆分并忽略空行
$data = file($path, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
echo json_encode($lines, JSON_FORCE_OBJECT);
请参见control.php文件中的,只需替换该行即可
$lines = explode(PHP_EOL,$data);
与
我已经测试了它,它的输出如下
{"0":"one","1":"two","2":"three"}
使用trim()将删除任何不需要的空白
此外,如果文件为空,则fread()将生成警告
fread(): Length parameter must be greater than 0
为了防止出现这种情况,最后的代码应该是这样的
<?php
$path = "test.txt";
$lines = '';
if(filesize($path)>0){
$file = fopen($path, 'r');
$data = fread($file, filesize($path));
$lines = explode(PHP_EOL,trim($data));
fclose($file);
}
echo json_encode($lines, JSON_FORCE_OBJECT);
?>
只有当文件不为空时,我们才需要打开并读取文件您是否检查了testfiletest.txt
中的最后一行是否以回车/换行结束?如果是这样,这将在$lines
数组中生成一个空项。@xaccrocher您可以添加test.txt文件吗contents@Bjoern是的,在vi中,光标位于“三”的t
,下面的一行是空的~
一行。有没有其他方法可以检查我的文件中是否有空行?当您从浏览器(直接,而不是通过ajax)调用脚本时,源代码视图中有什么?可能是一些php错误/警告消息?@VolkerK您的评论让我找到了解决方案:文件中的某个地方有一个恶意的echo
,可能把json数组搞砸了。还有,你的答案对我很有用,谢谢大家!非常感谢您的帮助@sagar;我试过了,我试过了array_filter(),他们都做过删除这个空的最后一条记录的工作(我觉得很脏),但不管json_编码是什么,都会不断插入这个{“error”:“error”,“message”:[]}
我对星星做了什么?!好的,它可以工作,只需删除第二行,因为$data在此阶段是一个格式良好的数组:)再次感谢,伙计们。$data=file(…)
行将替换您发布的几乎所有其他内容,从$file=fopen…
开始。
<?php
$path = "test.txt";
$lines = '';
if(filesize($path)>0){
$file = fopen($path, 'r');
$data = fread($file, filesize($path));
$lines = explode(PHP_EOL,trim($data));
fclose($file);
}
echo json_encode($lines, JSON_FORCE_OBJECT);
?>