我有一个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对象引用相关数据。

最佳答案

给定您的数据结构,您真的想遍历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是具有命名属性的对象数组。

09-20 20:37