迭代json时获得不一致的输出

时间:2014-03-20 09:22:24

标签: javascript jquery json

set_options_list = function(selctelm, json){
    $(selctelm).empty();
    for ( key in json.array.F_02_0010){
        val = json.array.F_02_0010[key]
        console.log(key, typeof val, val[0], val[1]);
    };
}

这是我的json数组:

json.array = {F_02_0010 : [{0 : "-------"},
                      {1:"20億円以上"},
                      {2:"14億円以上20億円未満"},
                      {3:"7億円以上14億円未満"},
                      {4:"7000万円以上7億円未満"},
                      {5:"7000万円未満"}],

          F_02_0110 : [{0 : "-------"},
                      {1:"10億円以上"},
                      {2:"7億円以上10億円未満"},
                      {3:"4億円以上7億円未満"},
                      {4:"4000万円以上4億円未満"},
                      {5:"4000万円未満"}],

          F_02_0210 :[{0 : "-------"},
                      {1:"10億円以上"},
                      {2:"7億円以上10億円未満"},
                      {3:"4億円以上7億円未満"},
                      {4:"5000万円以上4億円未満"},
                      {5:"5000万円未満"}],
         "default": [{0 : "-------"}]
};

我正在undefined访问密钥和值。这可能是什么原因? 这是console.log结果:

0 object ------- undefined 
1 object undefined 20億円以上 
2 object undefined undefined 
3 object undefined undefined 
4 object undefined undefined 
5 object undefined undefined 

我不确定为什么我在这里未定义?

3 个答案:

答案 0 :(得分:1)

你可能会这样想:

json.array = {F_02_0010 : ["-------",
                      "20億円以上",
                      "14億円以上20億円未満",
                      "7億円以上14億円未満",
                      "7000万円以上7億円未満",
                      "7000万円未満"],

          F_02_0110 : ["-------",
                      "10億円以上",
                      "7億円以上10億円未満",
                      "4億円以上7億円未満",
                      "4000万円以上4億円未満",
                      "4000万円未満"],

          F_02_0210 :["-------",
                      "10億円以上",
                      "7億円以上10億円未満",
                      "4億円以上7億円未満",
                      "5000万円以上4億円未満",
                      "5000万円未満"],
         "default": ["-------"]
};

或者这样:

json.array = {F_02_0010 : {0 : "-------",
                      1:"20億円以上",
                      2:"14億円以上20億円未満",
                      3:"7億円以上14億円未満",
                      4:"7000万円以上7億円未満",
                      5:"7000万円未満"},

          F_02_0110 : {0 : "-------",
                      1:"10億円以上",
                      2:"7億円以上10億円未満",
                      3:"4億円以上7億円未満",
                      4:"4000万円以上4億円未満",
                      5:"4000万円未満"},

          F_02_0210 : {0 : "-------",
                      1:"10億円以上",
                      2:"7億円以上10億円未満",
                      3:"4億円以上7億円未満",
                      4:"5000万円以上4億円未満",
                      5:"5000万円未満"},
         "default": {0 : "-------" }
};

答案 1 :(得分:0)

F_02_0010属性包含一个对象数组,必须使用传统的for语法进行迭代。在每次迭代期间,抓取对象然后遍历其单个键:

set_options_list = function(selctelm, json){
    $(selctelm).empty();
    for (var i =0; json.array.F_02_0010.length; i++){
        var val = json.array.F_02_0010[i];

        for(key in val){
            console.log(val[key]);
        }         

    };
}

答案 2 :(得分:0)

有道理:

json.array.F_02_0010 [0]是{0:“-------”},

json.array.F_02_0010 [1]是{1:“20亿円以上”},

json.array.F_02_0010 [2]是{2:“14亿円以上20亿円未満”},

等...

所以:

json.array.F_02_0010 [0] [i]是“-------”如果i == 0,否则未定义

json.array.F_02_0010 [1] [i]是“20亿円以上”如果i == 1,则未定义

json.array.F_02_0010 [2] [i]是“14亿円以上20亿円未満”如果i == 2,则未定义

等...