Javascript 循环浏览json数据以创建下拉列表

Javascript 循环浏览json数据以创建下拉列表,javascript,jquery,json,Javascript,Jquery,Json,我有两种类型的值的json数据。在第一种情况下,只有一个元素将被插入到下拉列表中,而在其他情况下,可以将多个项目插入到下拉列表中 JS: var数据= { “GETBILLERRESPONSE”: { “RESPONSECODE:“0”,“RESPONSEMESSAGE:“Success”,“BILLERS:” { “BILLER”:{ “@ID:”6“,“@EID:”FALSE“,“@ISGETBALANCE:”TRUE“,“#text:”爆米花狂热“,”服务“:”null } } } };

我有两种类型的值的json数据。在第一种情况下,只有一个元素将被插入到下拉列表中,而在其他情况下,可以将多个项目插入到下拉列表中

JS:

var数据=
{
“GETBILLERRESPONSE”:
{
“RESPONSECODE:“0”,“RESPONSEMESSAGE:“Success”,“BILLERS:”
{
“BILLER”:{
“@ID:”6“,“@EID:”FALSE“,“@ISGETBALANCE:”TRUE“,“#text:”爆米花狂热“,”服务“:”null
}
}
}
};
变量数据1={
“GETBILLERRESPONSE”:
{
“RESPONSECODE:“0”,“RESPONSEMESSAGE:“Success”,“BILLERS:”
{
“BILLER”:
[
{
“@ID:”1“,“@EID:”真“,“@ISGETBALANCE:”真“,“#text:”孟买账单支付“,”服务“:{
“服务”:
[
{
@ID:“1”,#text:“账单付款”
},
{
@ID:“2”,#text:“罚款”
}
]
}
},
{
“@ID:”7“,“@EID:”FALSE“,“@ISGETBALANCE:”TRUE“,“#text:”德里账单支付“,”服务“:”null
},
{
“@ID:”23“,“@EID:”FALSE“,“@ISGETBALANCE:”TRUE“,“#text:”金奈账单支付“,”服务“:”null
}
]
}
}
};
var ResponseMessage=data1.GETBILLERRESPONSE.ResponseMessage;
如果(ResponseMessage==“成功”)
{
var k=0;
var Html=“”+”请选择收款人。“+”;
var lenforbillers=data1.GETBILLERRESPONSE.BILLERS.BILLER.length;
var objforbillers=data1.GETBILLERRESPONSE.BILLERS.BILLER;
对于(k=0;k
我的问题是:

  • 如果json嵌套列表中只有一个元素,为什么我不能使用数组索引[0]检索它
  • 我的for循环代码适用于
    data1
    ,但不适用于
    data
    ,因为
    data
    只包含一个元素
  • 我怎么能只写一段代码,不管json中的嵌套元素是什么,它都会装入下拉列表
  • 小提琴:

    1) 如果json嵌套列表中只有一个元素,为什么我不能使用数组索引[0]检索它

    因为该对象上没有名为
    “0”
    的属性

    2) 我的for循环代码适用于data1,但不适用于data,因为data只包含一个元素

    3) 我怎么能只写一段代码,不管json中的嵌套元素是什么,它都会装入下拉列表

    好吧,我会在源头解决它。它应该返回一致的数据结构,而不是返回一个或多个

    但是,如果您不能依赖于此,则必须检查是否正在恢复阵列:

    if ($.isArray(data1.GETBILLERRESPONSE.BILLERS.BILLER) {
        // It's an array
    }
    else {
        // It's not
    }
    
    然后你可以相应地采取行动。一个简单的答案是将其设置为数组:

    if (ResponseMessage == "Success")
    {
        var k=0;
        var Html = "<option value=\"-1\">" + "Please select a payee." + "</option>";    
        var objforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER;
        if (!$.isArray(objforbillers)) {          // <== New
            objforbillers = [objforbillers];      // <== New
        }                                         // <== New
        var lenforbillers = objforbillers.length; // <== Moved and modified
    
        for (k = 0; k < lenforbillers; k++)
        {
            Html += "<option value=\"" + (objforbillers[k]['@ID']) + "\">" + (objforbillers[k]['#text']) + "</option>";         
        }
        $("#dlInstantPayPayeee").html(Html);
    }
    
    1) 如果json嵌套列表中只有一个元素,为什么我不能使用数组索引[0]检索它

    因为该对象上没有名为
    “0”
    的属性

    2) 我的for循环代码适用于data1,但不适用于data,因为data只包含一个元素

    3) 我怎么能只写一段代码,不管json中的嵌套元素是什么,它都会装入下拉列表

    好吧,我会在源头解决它。它应该返回一致的数据结构,而不是返回一个或多个

    但是,如果您不能依赖于此,则必须检查是否正在恢复阵列:

    if ($.isArray(data1.GETBILLERRESPONSE.BILLERS.BILLER) {
        // It's an array
    }
    else {
        // It's not
    }
    
    然后你可以相应地采取行动。一个简单的答案是将其设置为数组:

    if (ResponseMessage == "Success")
    {
        var k=0;
        var Html = "<option value=\"-1\">" + "Please select a payee." + "</option>";    
        var objforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER;
        if (!$.isArray(objforbillers)) {          // <== New
            objforbillers = [objforbillers];      // <== New
        }                                         // <== New
        var lenforbillers = objforbillers.length; // <== Moved and modified
    
        for (k = 0; k < lenforbillers; k++)
        {
            Html += "<option value=\"" + (objforbillers[k]['@ID']) + "\">" + (objforbillers[k]['#text']) + "</option>";         
        }
        $("#dlInstantPayPayeee").html(Html);
    }
    

    您的第一个数据语法丢失

            "BILLER":
            [
                {
                   "@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
                }
            ]
    

    第一个数据语法丢失

            "BILLER":
            [
                {
                   "@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
                }
            ]
    

    如果您将第一个
    数据
    对象更改为此

    var data = {
        "GETBILLERRESPONSE": {
            "RESPONSECODE":"0","RESPONSEMESSAGE":"Success","BILLERS": {
                "BILLER": [ {
                    "@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
                 } ]
            }
        }
    };
    

    您的代码片段在这两种情况下都能正常工作;这意味着当前对象具有不同的结构。对象
    数据
    帐单
    不是正确的数组,因此无法按索引访问内容。

    如果将第一个
    数据
    对象更改为此

    var data = {
        "GETBILLERRESPONSE": {
            "RESPONSECODE":"0","RESPONSEMESSAGE":"Success","BILLERS": {
                "BILLER": [ {
                    "@ID":"6","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"POP CORN MANIA","SERVICES":null
                 } ]
            }
        }
    };
    

    您的代码片段在这两种情况下都能正常工作;这意味着当前对象具有不同的结构。您的对象
    数据
    帐单
    不是正确的数组,因此您无法按索引访问内容。

    Clean&Complete!非常感谢。干净完整!非常感谢。