Самый простой способ использовать объект json, полученный из coldfusion (из запроса)

У меня есть CFC это возвращает объект запроса в формате JSON, выглядит так:

{
 "COLUMNS":["CMADDR","CMBILL","CMCRLIMIT","CMCRREVIEW","CMCRTERMS","CMCRUPDATE","CMCURR"],
 "DATA":[[1.2004856E7,3.2004856E7,0,"January, 01 1959 00:00:00","N\/30",null,"USD",null,false,false,false,"",0,"","US", ...],
        [2.2045505E7,3.2004583E7,4000,"January, 01 1959 00:00:00","1\/10N30",null,"USD",null,false,false....]]
}

данные были сокращены только ради структуры

Но мне возвращают объект jSON со столбцами и данными.

Каков наилучший способ получить доступ к этим данным с помощью jQuery? Извините за мою неопытность, так как в прошлом я просто использовал более простые структуры, и я обычно определял их сам, таким образом CFC возвращает этот вывод мне, и я вынужден использовать его и повторять через него с конечным результатом будучи таблицей данных.

Я пробовал следующее, но пока получаю неопределенные значения:

// ajax calls .. this is on success..
// ...
function(data) {
    //alert('got data back! \n'+data);
    var obj = jQuery.parseJSON(data);
    $.each(obj, function(index, itemData) {
    $('#modal-table-listing > tbody:last').append('<tr>' +
        '<td>[Select]</td>' +
        '<td>'+ itemData.cmAddr +'</td>' +
        '<td>'+ itemData.adName +'</td>' +
        '<td>'+ itemData.adState +' - '+ itemData.adCity +' - '+ itemData.adZip +'</td></tr>');
    });

    console.log(obj);
}

Я хотел бы использовать columns объект для ссылки на соответствующие данные, если это имеет смысл.

1 ответ

Решение

Учитывая вашу структуру данных, вы действительно хотите пройтись по obj.data, Ваш возвращенный объект имеет ДВА свойства. Один описывает ваши столбцы, следующий - массив результатов.

var obj = jQuery.parseJSON(data);
$.each(obj.DATA, function(index, itemData) {
$('tbody:last').append('<tr>' +
    '<td>[Select]</td>' +
    '<td>'+ itemData[0]+'</td>' +
    '<td>'+ itemData[1] +'</td>' +
    '<td>'+ itemData[2] +' - '+ itemData[3] +' - '+ itemData[4] +'</td></tr>');
});

Я не знаю, какие столбцы, какой индекс, учитывая данные. Но вы можете понять это с помощью obj.columns.indexOf('CMADDR'); или что-то подобное, это даст вам 0.

Редактировать Вероятно, вы можете легко написать быстрое сокращение карты с помощью Underscore.js, чтобы получить именно тот формат, который вы хотели. Что-то вроде

myData = _.map(obj.data, function(row){ 
             var item = {"column1" : row[0],
                         "column2" : row[1]}; 
              return item;
             }); `

В результате myData будет массивом объектов с именованными свойствами.

Другие вопросы по тегам