Javascript цикл через строку JSON - PullRequest
       5

Javascript цикл через строку JSON

4 голосов
/ 21 сентября 2010

Хорошо, немного нового в формате JSON ..

У меня есть следующая строка JSON, возвращенная из вызова AJAX, который firebug действительно отображает в дереве довольно хорошо ... однако я не могу понять, как обходить содержимое ...

{"data":{"item":[{"@id":"7","fromMemberID":"7","FromMember":"david","notificationsType":"event","notificationsDesc":"A new event (Test Event Thursday, 16 September 2010) has been created.","notificationsDate":"16 Sep 2010","notificationsTime":"00:02:18"},{"@id":"8","fromMemberID":"7","FromMember":"david","notificationsType":"event","notificationsDesc":"A new event (Test Event Thursday, 16 September 2010) has been created.","notificationsDate":"16 Sep 2010","notificationsTime":"08:26:24"}]}}

Я пытался сказать, получить количество элементов .. alert (data.item.length); или цикл:

for(i=0; i<data.item.length; i++)
{
    alert(data.item[i].FromMember);
}

явно упускает что-то фундаментальное ...

Есть идеи ??

Ответы [ 5 ]

2 голосов
/ 21 сентября 2010

Объект JSON является стандартом в новых браузерах.Для более старых браузеров вы можете добавить библиотеку javascript json2.js из json.org (2,5 КБ).

Чтобы преобразовать строку в объект, используйте JSON.parse

var response = JSON.parse('{"data":{"ite...ime":"08:26:24"}]}}'),
    item = response.data.item;

А чтобы отправить свои данные обратно на сервер, используйте JSON.stringify:

var jsonString = JSON.stringify(theObject);
2 голосов
/ 21 сентября 2010

Вы были очень близки ... "данные" на самом деле являются ключом в вашем JSON, поэтому вы должны обратиться к переменной JSON для доступа к "данным" .... так что вы хотите JSON.data.item[i].FromMember

Вот полный рабочий код:

(function () {
    var json = {"data":{"item":[{"@id":"7","fromMemberID":"7","FromMember":"david","notificationsType":"event","notificationsDesc":"A new event (Test Event Thursday, 16 September 2010) has been created.","notificationsDate":"16 Sep 2010","notificationsTime":"00:02:18"},{"@id":"8","fromMemberID":"7","FromMember":"david","notificationsType":"event","notificationsDesc":"A new event (Test Event Thursday, 16 September 2010) has been created.","notificationsDate":"16 Sep 2010","notificationsTime":"08:26:24"}]}};

    var i;
    var iLength = json.data.item.length;
    for (i = 0; i < iLength; i++) {
        alert(json.data.item[i].FromMember);
    }
})();​

jsFiddle

0 голосов
/ 21 сентября 2010

у вас должно быть что-то подобное, чтобы это работало. обратите внимание на obj в for-loop.

var obj = {"data":{"item":[{"@id":"7","fromMemberID":"7","FromMember":"david","notificationsType":"event","notificationsDesc":"A new event (Test Event Thursday, 16 September 2010) has been created.","notificationsDate":"16 Sep 2010","notificationsTime":"00:02:18"},{"@id":"8","fromMemberID":"7","FromMember":"david","notificationsType":"event","notificationsDesc":"A new event (Test Event Thursday, 16 September 2010) has been created.","notificationsDate":"16 Sep 2010","notificationsTime":"08:26:24"}]}};

for (i = 0; i < obj.data.item.length; i++) {
    alert(obj.data.item[i].FromMember);
}​

или если у вас data в качестве переменной, все равно вы должны назвать ее как data.data.item.length.

0 голосов
/ 21 сентября 2010

Просто передайте свой JSON функции ниже.

function getData(obj) {
    var myData = obj.data.item, i, output = '';

    for (i = 0; i < myData.length; i += 1) {
        for (key in myData[i]) {
         output += key + " : " + myData[i][key];
        }       
    }
    return output;
}

Нажмите для примера

0 голосов
/ 21 сентября 2010

Убедитесь, что вы используете десериализацию JSON.

var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);

Зависит от того, какие фреймворки JavaScript вы используете, у каждого есть свой десериализатор.

В приведенном выше примере используется библиотека MicrosoftAjax.js.

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...