jQuery:神秘的Json解析错误

时间:2013-02-18 00:29:44

标签: javascript jquery json parsing

我在一个页面上收到错误,其代码在另一个页面上完美运行......这是:

$.each(json,function(index,element){
var tr = $("<tr>").appendTo($tabbody);
$(tr).append('<td><a target="_blank" href="forum.php?t='+element.topic_id+'">'+element.topic_nom+"</a></td>"+'<td>'+element.date_heure+"</td>");
});

json是php页面上GET请求的结果:

$data = $query->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($data);

结果的例子:

[
    {
    "topic_nom": "Deuxième question de linterro manip 5",
    "topic_id": "1",
    "user_nick": "Symael",
    "user_id": "1",
    "msg_id": "10",
    "date_heure": "2013-02-17 18:28:04"
    },
    {
    "topic_nom": "Quel est le sens de la vie ?",
    "topic_id": "2",
    "user_nick": "Symael",
    "user_id": "1",
    "msg_id": "10",
    "date_heure": "2013-02-17 18:28:04"
    }
]

哪个是有效的Json ......我得到的错误是:

TypeError: invalid 'in' operand e
...ute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r...

如果我尝试$ .parseJSON(json); :

SyntaxError: JSON.parse: unexpected character
...ute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r...

当我在http://jsonlint.com/上验证我的Json时,结果是:

Parse error on line 1:
[    {        "to
^
Expecting '{', '['

如果手动重写第一个[它突然变得有效。 我想我是这里一个非常奇怪的故障的受害者,有人可以帮助我吗? OO


以下是解决方案,请参阅Stoive的解释答案。

  obj = $.parseJSON(json.trim());
    $.each(obj,function(index,element){
      var tr = $("<tr>").appendTo($tabbody);
      $(tr).append('<td><a target="_blank" href="forum.php?t='+element.topic_id+'">'+element.topic_nom+"</a></td>"+'<td>'+element.date_heure+"</td>");
    });

1 个答案:

答案 0 :(得分:4)

通常情况下,byte order mark可以隐藏在记事本等编辑器中保存的文件中。

尝试在位置0获取json的字符代码,并在结果中获取console.log

console.log(json.charCodeAt(0).toString(16));

结果应该是5b,而不是feff。如果是这种情况,那么JSON.parse(json.trim())可以通过删除不可见的空白字符来提供帮助。