使用jQuery / AJAX解码JSON

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

"{"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)。 知道我做错了什么吗?

 {"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/

使用jsonlintvalidationJSON

所以你的代码可以简化为

 $.getJSON("class.aspx/getClass",function(msg){ alert("TotalClass : "+msg.TotalClass); $.each(msg.Students,function(index,item){ alert(item.Name+ " - "+item.Grade) }); }); 

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

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

所以,只需尝试alert(msg.TotalClass)

此外,该JSON无效。 在TotalCount之后和Grade之后你有额外的。 此外, John应该是双引号。

试着提醒

 $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" }