如何从此JSON检索ACCOUNTNAME?

时间:2011-12-16 17:05:15

标签: jquery

我试图弄清楚如何使用jQuery循环JSON并输出一个特定的列。

以下是我的数据库中的JSON响应:

{"COLUMNS":["ACCOUNTID","ACCOUNTNAME","ADDRESS1","ADDRESS2"],"DATA":[[1,"ZooLoo Inc","123 ELm St","Orlando"],[2,"Go Company Inc","567 ELm St","Orlando"],[3,"House Inc","4232 Main St","Orlando"]]}

以下是我尝试使用的jQuery代码:

function showResponse(data){

        $.each(data.COLUMNS, function(i, item){

            if (item == 'ACCOUNTNAME') {

                $("#alertBox").append(data.DATA + " ");

            }

        }); 

我的目标是从中获取帐户名称并将其输出。我一直在玩循环的各种变化,但我无法弄清楚如何告诉它只是给我帐户名称。我只想输出3个帐户名。

任何帮助都会很棒。

谢谢!

3 个答案:

答案 0 :(得分:3)

跳过jQuery,你不需要它。

function showResponse(data){
    //if you don't know the index of account name:
    var nNameIndex = -1;
    //you may be able to replace this loop with 
    //nNameIndex = data["COLUMNS"].indexOf("ACCOUNTNAME");
    //but I'm not sure how browser compatible that is, and how compatible you need to be.
    for(var nI = 0; nI < data["COLUMNS"].length; nI++){
       if(data["COLUMNS"][nI] == "ACCOUNTNAME"){
          nNameIndex = nI;
          break;
       }
    }
    if(nNameIndex  != -1)
        for(var nI = 0; nI < data["DATA"].length; nI++){
           //data["DATA"][nI] -- this is the array of values
           alert(data["DATA"][nI][nNameIndex]);//second column of array, account name
        }
}

答案 1 :(得分:1)

我建议让你的JSON看起来像这样:

{"COLUMNS":
    [{
        "ACCOUNTID": 1,
        "ACCOUNTNAME": "ZooLoo Inc",
        "ADDRESS1": "123 ...",
        "ADDRESS2": "Orlando"
    },
    {
        "ACCOUNTID" 2,
        ...
    }]
}

使用这种格式会使帐户名称像data.COLUMNS.ACCOUNTNAME一样简单,而不是复杂的数组/循环系列。

答案 2 :(得分:1)

正如其他帖子已经建议的那样,你可能最好稍微重新组织一下输出以更好地使用JSON(即item.ACCOUNTNAME,而不是通过数组索引器访问它)。

Aepheus说得对,你不需要jQuery来做到这一点。但是,如果您打算使用jQuery,我可以建议这个解决方案(jsFiddle):

var dataCol = -1;
$.each(data.COLUMNS, function(i, item) {
    if (item == 'ACCOUNTNAME') {
        dataCol = i;
        return false;
    }
});
if (dataCol != -1) {
    $.each(data.DATA, function(i, item){
        //item[dataCol] should be Account Name. Do what you want with it.
        //I chose to append it to a list.
        $("#alertBox").append('<li>' + item[dataCol] + '</li>');    
    }); 
} else {
    $("#alertBox").append('<li>No accounts</li>');   
}