使用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" }