7

我正在尝试使用 jQuery 解码 JSON。这是我得到的(例如一堂课,这里有一个学生):

"{"Students":[{"Name":John,"Grade":17,}],"TotalClass":17,"TotalCount":1,}"

这就是我所做的:

$j.ajax({
    type: 'POST',
    url: 'class.aspx/getClass',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (msg) {
        $j.each(msg, function (index, element) {
            alert(element.TotalClass);
        });
    },
});

它在警报中一直说未定义(但我收到了正确的 JSON)。知道我做错了什么吗?

4

3 回答 3

8
{"Students":[{"Name":John,"Grade":17,}],"TotalClass":17,"TotalCount":1,}

不是有效的 JSON !

假设你有一个JSON这样的有效

{
    "Students": [
        {
            "Name": "John",
            "Grade": "17"
        }
    ],
    "TotalClass": " 17",
    "TotalCount": "1"
}

您可以访问这样的值

alert("TotalClass : "+msg.TotalClass);
//loop thru students
$.each(msg.Students,function(index,item){
   alert(item.Name+ " - "+item.Grade)
}); 

工作样本:http: //jsfiddle.net/ncbLF/5/

使用jsonlint验证 JSON

所以你的代码可以简化为

$.getJSON("class.aspx/getClass",function(msg){

    alert("TotalClass : "+msg.TotalClass);
    $.each(msg.Students,function(index,item){
        alert(item.Name+ " - "+item.Grade)
    });
});
于 2012-06-13T15:50:48.523 回答
2

试着提醒

$j.each(msg, function (key, element) {
    alert(key); // output: Students, TotalClass..
    alert(element); //output: [{"Name":John,"Grade":17,}, 17..
});

笔记

正如您设置的dataType: 'json'那样,我认为您不需要任何额外的解析工作,并且鉴于 JSON 有错误,不知道它是您编写的还是最初从服务器发送的。

你不需要这条线

contentType: 'application/json; charset=utf-8',

您有效的 json 应如下所示:

{
    "Students": [
        {
            "Name": "John",
            "Grade": "17"
        }
    ],
    "TotalClass": " 17",
    "TotalCount": "1"
}
于 2012-06-13T15:46:14.867 回答
2

contentType是发送服务器的数据类型,而不是来自。删除它。

您在问题中包含的 JSON。那是服务器返回的确切JSON 吗?因为如果是,您不需要$.each. 你有一个对象,你应该只需要$.each循环一个对象数组。

所以,试试吧alert(msg.TotalClass)

此外,该 JSON 无效。你有一个额外的,afterTotalCount和 after Grade。另外,John应该用双引号。

于 2012-06-13T15:47:02.167 回答