прототип JSON для объекта - PullRequest
1 голос
/ 20 октября 2010

Следующее является частью строки JSON, возвращаемой с сервера:

{
  col1: { 
          caption: 'Workspace',
          combodata: {
                       c_0: {
                              id: 0,
                              value: 'Filter...'
                            },
                       c_1: {
                              id: 1, 
                              value: 'Tax'
                            },
                       c_2: {
                              id: 2, 
                              value: 'HR'
                            }
                      }
        }
}

После eval я могу получить доступ к .caption, и .combodata отображается в Firebug как объект, с c_0 иc_1 видим как объекты внутри .combodata, с идентификатором и значением в c_0 и c_1.

Как пройти через каждый объект в .combodata?Я пытался .combodata.each(c), но это исключение.Я не буду знать имена объектов в .combodata во время выполнения.

Ответы [ 4 ]

3 голосов
/ 20 октября 2010

Для этого можно использовать обычный цикл for:

for(var key in obj.col1.combodata) {
    var combo_obj = obj.col1.combodata[key];
    ...
}
2 голосов
/ 20 октября 2010

Могу ли я предположить, что вы не используете eval () возвращаемый JSON?Что вы должны делать:

var jsondata = { ... };
var obj = JSON.parse(jsondata);

Причина в том, что вычисление строки может быть опасным.Представьте, что ваши данные в формате JSON выглядят так:

"{ some json data here }; alert(document.cookie)"

Когда вы проверяете это, им показывается куки пользователя.Теперь подумайте, что произойдет, если вместо предупреждения этот куки-файл будет отправлен на URL-адрес злоумышленника.Теперь они имеют доступ к этой учетной записи пользователя, если такая существует.

1 голос
/ 20 октября 2010

если

var result = {col1: { caption: 'Workspace',combodata: {c_0: {id: 0,value: 'Filter...'},c_1: {id: 1, value: 'Tax'},c_2: {id: 2, value: 'HR'}}}};

тогда

for ( i in result.col1.combodata ) {
    var item = result.col1.combodata[i];
    //Do stuff with item
}
0 голосов
/ 21 октября 2010

Я нашел следующее, чтобы работать и буду использовать это:

Object.values(col1.combodata).each(function(c2) {
          id = c2.id;
});
...