我从php文件中得到以下json响应
{
"id":"85",
"title":"Hello,
hello I said",
"tags":null,
}
“标题”中的正确输出应该是:“标题”:“你好,你好我说”,bla bla bla。
注意Hello之后的逗号。
我正在使用json_encode()但我仍然得到上面的结果(打破了json)。
这是我的PHP代码:
$query = mysql_query("SELECT * from songs");
$rows = array();
while($r = mysql_fetch_assoc($query)) {
$rows[] = $r;
}
$songArray = array(
"songs" => $rows
);
$jsonD = json_encode($songArray);
如果我在输入中不包含逗号,一切正常。
代码应该有效,没有什么特别之处。
有没有人知道为什么会这样?我该如何解决? 谢谢
答案 0 :(得分:2)
{
"id":"85",
"title":"Hello,
hello I said",
"tags":null,
}
是无效的json。
您需要在null,
{
"id":"85",
"title":"Hello,
hello I said",
"tags":null
}
答案 1 :(得分:2)
您应该在,
之后删除额外的"tags":null,
- 大多数浏览器都会接受此JSON,但我相信某些IE版本会对此感兴趣。
您可能遇到的主要问题是看起来有一个换行符:
"title":"Hello,
hello I said",
如果这是一个真正的换行符(例如,char 13或char 10),则javascript将不会满意(未终止的字符串文字)。修复是使用PHP字符串替换函数来替换任何出现的char 13或10与替换字符,可能只是一个空格。以下是使用preg_replace()的示例:
答案 2 :(得分:0)
快速解决您的问题将使用rtrim,如下所示。
$json = rtrim(json_encode($songArray), ',}') . '}';
如果你的Json在结束括号之前有一个换行符,则使用以下内容将解决这个问题。
$json = rtrim(json_encode($songArray), ",\n}") . "\n}";
或者您可以使用下面的preg替换。
$json = preg_replace("/,}/", '}', json_encode($songArray));
答案 3 :(得分:0)
将json传递给
{
"id": "85",
"title": "Hello,hello I said",
"tags": ""
}
我验证了在线json验证器中的json有两个错误,第一个是你的json的第3行,它凸轮因为你在“Hello”之后输入了一个。第二个是因为您在第四个中放置了null,您可以使用下面的链接来验证json。
答案 4 :(得分:0)
谢谢大家的时间和意见。
答案 5 :(得分:0)
这确实是无效的json。
但是,如果您仍然想解析那些错误的json,并且需要多维,则可以使用:
json_decode(preg_replace('/,\s*}/','}',$config_json));
请注意,它将用}替换所有',}'出现的内容,因此请注意,如果json中的字符串可能包含它们,则要小心。
feg。
{
"option1": 20,
"more_info": {
"the_weird_string": "the string that, } somehow contains this",
},
"option2": 10,
}
将返回
[the_weird_string] => the string that} somehow contains this