Декодировать JSON с помощью jQuery / AJAX

Я пытаюсь декодировать JSON с помощью jQuery. Вот что я получаю (например, класс, здесь с одним студентом):

"{"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);
        });
    },
});

он продолжает говорить undefined в предупреждении (но я получаю правильный JSON). Есть идеи, что я делаю не так?

3 ответов


{"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)
    });
});

contentType - тип отправленных данных to сервера, а не от. Удалить.

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