Ошибка при синтаксическом анализе ответа JSON в JQuery, JavaScript - PullRequest
1 голос
/ 19 октября 2011

Я получаю в качестве ответа JSON, но в некоторых индексах есть пробелы, такие как «Код сотрудника».Вот почему я не могу разобрать это.Кто-нибудь может подсказать способ его разборки в JavaScript?

{
    "Employees": [
        {
            "Employee": {
                "Employee ID": "777",
                "Short Name": "abc",
                "First name": null,
                "Middle name": null,
                "Last name": null,
                "Designation": "Senior Engineer",
                "Ext-1": null,
                "Ext-2": null,
                "Mobile-1": null,
                "Mobile-2": null,
                "Email": "a.b@gmail.com"
            }
        },
        {
            "Employee": {
                "Employee ID": "888",
                "Short Name": "xyz",
                "First name": null,
                "Middle name": null,
                "Last name": null,
                "Designation": "Test Lead",
                "Ext-1": null,
                "Ext-2": null,
                "Mobile-1": null,
                "Mobile-2": null,
                "Email": "c.d@gmail.com"
            }
        }
    ]
}

Мой код -

 function GetContacts() {
    $.ajax({
        type: "GET",
        contentType: 'application/json; charset=utf-8',
        url: "http://. . . . . .",

        dataType: "json",
        success: function(data) {

            //alert(data.getString("Employee ID"));
            $.each(data, function(i, contactList) {

                alert('First Loop' + i);
                alert('First Loop' + contactList[0]);

                $.each(contactList, function(j, Contact) {
                    //alert('Second Loop'+Contact);
                    var fnalObj = Contact;
                    //alert(fnalObj);
                    //alert(fnalObj.["Employee"]["Employee ID"]);
                    //alert(Employees[j]["Employee"]["Email"]);
                    //alert(Employees[0]["Employee"]["Employee ID"]);
                    alert(fnalObj.Employee.Email);
                    alert(fnalObj.Employee.Designation);
                    alert(fnalObj.Employee.Ext - 1);
                    alert(fnalObj.Employee.Mobile - 1);
                });
            });
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
            alert(textStatus);
        }
    });
}

Ответы [ 3 ]

3 голосов
/ 19 октября 2011

С парсингом все в порядке.

Проблема заключается в доступе к ключам, которые состоят из не алфавитно-цифровых символов ... например, пробелы, тире и т. Д.

Эти свойства должны обрабатываться с помощью [] обозначение, как это

alert(fnalObj.Employee['Employee ID']);
alert(fnalObj.Employee['Ext-1']);

Демо на http://jsfiddle.net/h9sbn/

2 голосов
/ 19 октября 2011

Вы не можете сделать fnalObj.Employee.Ext - 1. Правильный способ сделать это будет fnalObj.Employee['Ext-1']. Вот jsFiddle http://jsfiddle.net/naryad/VNXa5/1/

При использовании fnalObj.Employee.Ext - 1 оно разрешается до undefined - 1, что, в свою очередь, возвращает вам NaN

То же самое относится к fnalObj.Employee.Mobile - 1

0 голосов
/ 19 октября 2011
$.each(contactList, function(j, Contact) {
    //alert('Second Loop'+Contact);
    var fnalObj = Contact;
    $.each(finalObj, function (key, value) {
        var newKey = key.replace(/[\s]\-/g, '_');
        delete finalObj[key];
        finalObj[newKey] = value;
    });
    //revised alerts here.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...