json编码逗号失败

时间:2014-02-04 06:16:48

标签: php json comma

我从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);

如果我在输入中不包含逗号,一切正常。

代码应该有效,没有什么特别之处。

有没有人知道为什么会这样?我该如何解决? 谢谢

6 个答案:

答案 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()的示例:

Remove new lines from string

答案 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。

http://jsonlint.com/

答案 4 :(得分:0)

发现了这个问题。我正在使用一个让json易于阅读的功能。事实证明这是函数的问题。每当它发现一个逗号时它就打破了json,因此它搞砸了所有东西。我把这个功能拿出来,每个人都按照预期的那样工作。

谢谢大家的时间和意见。

答案 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