遍历json数据以创建下拉列表

毛茸茸

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

JS:

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

var data1 = {
    "GETBILLERRESPONSE":
    {
        "RESPONSECODE":"0","RESPONSEMESSAGE":"Success","BILLERS":
        {
            "BILLER":
            [
                {
                    "@ID":"1","@EIDENFORCED":"TRUE","@ISGETBALANCE":"TRUE","#text":"Mumbai Bill Payment","SERVICES":{
                        "SERVICE":
                        [
                            {
                                "@ID":"1","#text":"Bill Payment"
                            },
                            {
                                "@ID":"2","#text":"Fine Payment"
                            }
                        ]
                    }
                },
                {
                    "@ID":"7","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"Delhi Bill Payment","SERVICES":null
                },
                {
                    "@ID":"23","@EIDENFORCED":"FALSE","@ISGETBALANCE":"TRUE","#text":"Chennai Bill Payment","SERVICES":null
                }
            ]
        }
    }
};

var ResponseMessage = data1.GETBILLERRESPONSE.RESPONSEMESSAGE;

if (ResponseMessage == "Success")
{
    var k=0;
    var Html = "<option value=\"-1\">" + "Please select a payee." + "</option>";    
    var lenforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER.length;    
    var objforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER;

    for (k = 0; k < lenforbillers; k++)
    {
        Html += "<option value=\"" + (objforbillers[k]['@ID']) + "\">" + (objforbillers[k]['#text']) + "</option>";         
    }
    $("#dlInstantPayPayeee").html(Html);
}

我的问题:

  1. 如果json嵌套列表中只有一个元素,为什么不能使用数组index [0]检索它?
  2. 我的for循环代码适用于data1但不适用,data因为data它仅包含一个元素
  3. 我怎么能只写一段代码来创建下拉列表,而不管json中的嵌套元素如何

小提琴:http : //jsfiddle.net/E7zhK/3/

TJ人群

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

因为该对象上没有名称为的属性"0"

2)我的for循环代码适用于data1,但不适用于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);
}

或者,将for循环的主体排除在外(在这种情况下,它是单线的,但在一般情况下可能不是),然后适当地重用它:

if (ResponseMessage == "Success")
{
    var k=0;
    var Html = "<option value=\"-1\">" + "Please select a payee." + "</option>";    
    var objforbillers = data1.GETBILLERRESPONSE.BILLERS.BILLER;
    var lenforbillers;

    if ($.isArray(objforbillers)) {
        lenforbillers = objforbillers.length;
        for (k = 0; k < lenforbillers; k++)
        {
            Html += optionHtml(objforbillers[k]); 
        }
    }
    else {
        Html += optionHtml(objforbillers);
    }
    $("#dlInstantPayPayeee").html(Html);
}

function optionHtml(entry) {
    return "<option value=\"" + entry['@ID'] + "\">" + entry['#text'] + "</option>";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Angular 2-从本地json获取数据以填充下拉列表

读取JSON数据并遍历数据以根据条件获得特定值

循环遍历JSON数据以使用optgroup部分填充选择框时出现分析瘫痪

使用通过JSON和jQuery传递的数据在下拉列表中创建两个值

PHP如何使用数据库数据创建下拉列表

如何遍历下拉列表Scrapy

Django-从数据库数据创建下拉列表

使用JavaScript遍历数据以创建具有键/值对的字典

ASP.NET使用Entity Framework显示数据以使用不同的下拉列表

snapshot.data为Null。我正在使用for循环遍历JSON数据并创建对象实例列表

Javascript遍历JSON文件级别以填充下拉列表

从json创建下拉列表

AngularJS绑定数据以选择下拉列表,当另一个选择下拉列表的值更改时

在AngularJS的下拉列表中显示JSON数据

显示json数据以显示列表视图

如何使用JSON数据创建下拉列表

使用json中的angularJs创建下拉列表

使用JSON数据动态填充下拉列表

使用angular by下拉列表过滤json数据

订购Excel数据以进行数据验证(相关的下拉列表)

创建一个动态下拉列表,使用JQuery从JSON文件加载其数据

我正在尝试使用Angular JS从json数据创建级联下拉列表

使用 Spring MVC 从数据库获取数据以显示在下拉列表中,如国家、州、城市

使用纯 JavaScript 循环遍历 JSON 数据以填充指定数量的 HTML 文章

内联循环遍历列表以创建数据框

从数据帧创建列表的json列表

React 如何从 json 数据以表单呈现嵌套的下拉列表?

从 JSON 文件中获取数据以填充下拉列表并在选择下拉列表中显示其他数据

在 JavaScript 中从 JSON 数据填充下拉列表