JSON分析失败


JSON Parse failed

我使用JSON作为

{
   "js":[
      [
         "556",
         "Name the Bengali film television and stage actor who passed away recently?",
         "Gaynar Baksha",
         "Byomkesh Bakshi",
         "Pijush Ganguly",
         "Kaushik Ganguly",
         "Pijush Ganguly",
         "Beginner",
         "Android",
         "First Mobile OS by google"
      ],
      [
         "557",
         "Venkateswara Rao passed away recently. He was a",
         "Telugu poet",
         "Telugu director",
         "Telugu actor",
         "Telugu lyricist",
         "Telugu actor",
         "Beginner",
         "Android",
         "First Mobile OS by google"
      ],
      [
         "559",
         "Which Indian cricketer who became the fourth player to register hundred in ODIs? ",
         "Ishant Sharma",
         "Virendra Sehwag",
         "MS Dhoni",
         "Virat Kohli",
         "Virat Kohli",
         "Beginner",
         "Android",
         "First Mobile OS by google"
      ],
      [
         "568",
         "First Android Mobile ?",
         "Motorola",
         "Nokia",
         "Lenevo",
         "HTC",
         "Motorola",
         "Moderate",
         "Android",
         "Moto is the first company"
      ],
      [
         "569",
         "col1",
         "col2",
         "col3",
         "col4",
         "",
         "",
         "",
         "",
         ""
      ],
      [
         "570",
         "'u092d'u093e'u0930'u0924 'u0915'u0947 'u092a'u093e'u0938 125 'u092a'u0930'u092e'u093e'u0923'u0941 'u0939'u0925'u093f'u092f'u093e'u0930, 'u091c'u093e'u0928'u093f'u090f; 'u0915'u093f'u0938'u0915'u0940 'u0915'u093f'u0924'u0928'u0940 'u0924'u093e'u0915'u0924",
         "'u092a'u093e'u0938 125 'u092a'u0930'u092e'u093e'u0923'u0941",
         "data",
         "Php",
         "",
         "",
         "",
         "",
         ""
      ],
      [
         "571",
         "'u092a'u093e'u0938 125 'u092a'u0930'u092e'u093e'u0923'u0941",
         "'u0915'u093f'u0938'u0915'u0940 'u0915'u093f'u0924'u0928'u0940 'u0924'u093e'u0915'u0924",
         "video",
         "excel with php",
         "",
         "",
         "",
         "",
         ""
      ]
   ]
}

当我检查时http://www.jsoneditoronline.org/它显示正确,即经过验证,但当我使用AJAX和Jquery将它附加到HTML中的表中时,它无法附加。

我的附加代码如下:

$.ajax({
    type: "GET",
    url: "searchall.php",
    contentType: "application/json; charset=utf-8",
    success: function(data) {
        var response = $.parseJSON(data);
        for (i = 0; i < response.length; i++) {
            $('.dataTableReport').append('<tr style="text-align:center;"><td style="width:6.8%"><span><input name="qid" type="checkbox" value="' + response[i].Question_id + '" style="margin-left: 5%;"/>&nbsp&nbsp&nbsp<label for="qid">' + response[i].Question_id + '</label></span></td><td style="width:20.77%">' + response[i].Question + '</td><td style="width:9.3%">' + response[i].opt1 + '</td><td style="width:9%">' + response[i].opt2 + '</td><td style="width:9%">' + response[i].opt3 + '</td><td style="width:9.8%">' + response[i].opt4 + '</td><td style="width:9.1%">' + response[i].correct + '</td><td style="width:17.3%">' + response[i].explain + '</td><td style="width:5%" onclick="edit(' + response[i].Question_id + ')"> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></td><td style="width:5%" onclick="deletee(' + response[i].Question_id + ')"> <span class="glyphicon glyphicon-trash" aria-hidden="true"></span></td></tr>');
        }
    }
});

表中的所有字段都用"未定义"填充

如何解析JSON,以及如何附加?

我已将JSON修改为

[ { "Question_id":"556", "Question":"Name the Bengali film television and stage actor who passed away recently?", "opt1":"Gaynar Baksha", "opt2":"Byomkesh Bakshi", "opt3":"Pijush Ganguly", "opt4":"Kaushik Ganguly", "correct":"Pijush Ganguly", "Level":"Beginner", "Category":"Android", "explain":"First Mobile OS by google" }, { "Question_id":"557", "Question":"Venkateswara Rao passed away recently. He was a", "opt1":"Telugu poet", "opt2":"Telugu director", "opt3":"Telugu actor", "opt4":"Telugu lyricist", "correct":"Telugu actor", "Level":"Beginner", "Category":"Android", "explain":"First Mobile OS by google" }, { "Question_id":"559", "Question":"Which Indian cricketer who became the fourth player to register hundred in ODIs? ", "opt1":"Ishant Sharma", "opt2":"Virendra Sehwag", "opt3":"MS Dhoni", "opt4":"Virat Kohli", "correct":"Virat Kohli", "Level":"Beginner", "Category":"Android", "explain":"First Mobile OS by google" }, { "Question_id":"568", "Question":"First Android Mobile ?", "opt1":"Motorola", "opt2":"Nokia", "opt3":"Lenevo", "opt4":"HTC", "correct":"Motorola", "Level":"Moderate", "Category":"Android", "explain":"Moto is the first company" }, { "Question_id":"569", "Question":"col1", "opt1":"col2", "opt2":"col3", "opt3":"col4", "opt4":"", "correct":"", "Level":"", "Category":"", "explain":"" }, { "Question_id":"570", "Question":"'u092d'u093e'u0930'u0924 'u0915'u0947 'u092a'u093e'u0938 125 'u092a'u0930'u092e'u093e'u0923'u0941 'u0939'u0925'u093f'u092f'u093e'u0930, 'u091c'u093e'u0928'u093f'u090f; 'u0915'u093f'u0938'u0915'u0940 'u0915'u093f'u0924'u0928'u0940 'u0924'u093e'u0915'u0924", "opt1":"'u092a'u093e'u0938 125 'u092a'u0930'u092e'u093e'u0923'u0941", "opt2":"data", "opt3":"Php", "opt4":"", "correct":"", "Level":"", "Category":"", "explain":"" }, { "Question_id":"571", "Question":"'u092a'u093e'u0938 125 'u092a'u0930'u092e'u093e'u0923'u0941", "opt1":"'u0915'u093f'u0938'u0915'u0940 'u0915'u093f'u0924'u0928'u0940 'u0924'u093e'u0915'u0924", "opt2":"video", "opt3":"excel with php", "opt4":"", "correct":"", "Level":"", "Category":"", "explain":"" } ]

并且以下代码仍然不起作用

$.ajax({
                type: "GET",
                url: "sall.php" ,
                dataType: "text",
                success : function(data) 
                {
                var response = $.parseJSON(data);       
for (i = 0; i < response.length; i++) 
                {
$('.dataTableReport').append('<tr style="text-align:center;"><td style="width:6.8%"><span><input name="qid" type="checkbox" value="' + response[i].Question_id + '" style="margin-left: 5%;"/>&nbsp&nbsp&nbsp<label for="qid">' + response[i].Question_id + '</label></span></td><td style="width:20.77%">' + response[i].Question + '</td><td style="width:9.3%">' + response[i].opt1 + '</td><td style="width:9%">' + response[i].opt2 + '</td><td style="width:9%">' + response[i].opt3 + '</td><td style="width:9.8%">' + response[i].opt4 + '</td><td style="width:9.1%">' + response[i].correct + '</td><td style="width:17.3%">' + response[i].explain + '</td><td style="width:5%" onclick="edit('+response[i].Question_id+')"> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span></td><td style="width:5%" onclick="deletee('+response[i].Question_id+')"> <span class="glyphicon glyphicon-trash" aria-hidden="true"></span></td></tr>');
                }         
         }
         });

我正在从服务器获得响应,但在第var response = $.parseJSON(data);行,执行被终止。我很困惑为什么要解析JSON(数据);不工作?

如果更改php代码,使其返回json而不是text,则不需要解析返回的数据(var response = $.parseJSON(data);)。那么下面的代码可能会在这种情况下工作:

$.ajax({
       type: "GET",
       url: "sall.php" ,
       dataType: "json",
       success : function(data) {
            // this works with the original js data
             $.each(data.js, function(index, item) {
                // the two lines below are for testing, you can replace 
                // those with your $('.dataTableReport').append code
                console.debug(item[0])
                console.debug(item[1])
             });         
        }
  });

在上面的代码中,dataType被更改为json,并使用了jQuery的$.each方法。我制作了一个JSFiddle,展示了$.each如何在json项中循环。这里有一个类似类型的Stackoverflow问题的链接:在$.ajax中通过JSON迭代成功:

更新行

for (i = 0; i < response.length; i++)

for (i = 0; i < response['js'].length; i++)

并更换

response[i] -> response['js'][i]

在html附加流中。

另一种选择是更换线路:

response = $.parseJSON(data);

response = $.parseJSON(data)['js'];