Как декодировать объект JSON и перебирать его? - PullRequest
4 голосов
/ 07 июня 2011

В этой публикации я узнал, как кодировать объект на стороне сервера, и теперь я хотел бы декодировать его на стороне клиента.

На стороне клиента я делаю

$.ajax({
    type: "GET",
    url: "/cgi-bin/ajax_sort.pl",
    contentType: "application/json; charset=utf-8",
    dataType: "json",

    data: { "column" : this.id },

    error: function(XMLHttpRequest, textStatus, errorThrown) {
        showError('responseText: ' + XMLHttpRequest.responseText);
        showError('textStatus: ' + textStatus);
        showError('errorThrown: ' + errorThrown);
    },

    success: function(result){
        if (result.error) {
            showError(result.error);
        } else {

        var obj = jQuery.parseJSON(result);

        }
    }
});

Вопрос

Содержит ли obj теперь декодированные данные JSON?

Если это так, объект выглядит так на стороне сервера(вывод из Perl Data::Dumper)

$VAR1 = {
          '127' => {
                     'owners' => [
                                   'm'
                                 ],
                     'users' => [
                                  'hh',
                                  'do'
                                ],
                     'date_end' => '24/05-2011',
                     'title' => 'dfg',
                     'date_begin' => '24/05-2011',
                     'members_groups' => [],
                     'type' => 'individuel'
                   },
          '276' => {
                     ...

Вопрос

Действительно ли obj содержит декодированный JSON, как мне выполнить итерации по объекту?

Ответы [ 4 ]

5 голосов
/ 07 июня 2011

Поскольку вы указали dataType: 'json', result уже должен содержать объект Javascript, не сериализованный из ответа HTTP. $.parseJSON должно быть ненужным.

Вы можете пройти через него с помощью $.each:

success: function(result){
    if (result.error) {
        showError(result.error);
    } else {
        $.each(result, function(key, value) {
            alert(value.title).
        });
    }
}
1 голос
/ 07 июня 2011

Вы можете перебирать членов obj, используя for...in.

for(var key in obj) {
    var value = obj[key];
    alert(key + "=" + value);
}

Примечание: У вас не должно быть особых причин для перебора элементовчлены объекта JSON.JSON задуман как формат сериализации, в котором обе стороны (клиент и сервер) знают свою структуру.Если вы можете помочь, какие данные передаются, obj должен быть массивом во всей его области действия.

1 голос
/ 07 июня 2011

Вы должны объявить тип данных вашего запроса AJAX как JSON.jQuery автоматически «расшифрует» это и создаст из него объект.

Вы можете сразу получить доступ к данным через alert( result[127] );

1 голос
/ 07 июня 2011

result уже является объектом JSON - проанализирован jQuery, поскольку вы указали dataType: "json" - поэтому вам не нужно его анализировать.

Чтобы просмотреть данные, вы можете сделать это:

for(key in result){
    var curr = result[key];

    //iterate over owners    
     for(var i = 0; i < curr.owners.length; i++){
         alert(curr.owners[i]);
     }

    //iterate over users    
     for(var i = 0; i < curr.users.length; i++){
         alert(curr.users[i]);
     }

     alert(curr.data_end);
     alert(curr.title);

    //and so on...
}

Обновление

Я постоянно забываю о $.each(), как показано в ответе одного дня - вы можете захотеть пойти с этим вместо этого.

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