我们可以从这种类型的JSON数组中读取值

时间:2014-06-05 09:28:03

标签: jquery

我有以下JSON。 我正在读T3阵列。

我的问题是,是否可以读取值Can和Bottle

 var jsondata =  {
        "T3": [
            {
                "Can": [
                    {
                        "type": "pepsi can 250ml"
                    },
                    {
                        "type": "pepsi can 100ml"
                    }
                ]
            },
            {
                "Bottle": [
                    {
                        "type": "pepsi bottle 250ml"
                    },
                    {
                        "type": "pepsi bottle 100ml"
                    }
                ]
            }
        ]
    };

我同意,据我所知,我无法从这个级别继续前进?

for(var c=0;c<jsondata.T3.length;c++)
{


}

但我仍然想问这是否可以做到?

3 个答案:

答案 0 :(得分:1)

基本上,您现在想要使用c变量来引用T3数组的相关部分:

for(var c=0;c<jsondata.T3.length;c++){
  var can_data = jsondata.T3[ c ][ "Can" ]; // T3[ 0 ][ "Can" ]
  var bottle_data = jsondata.T3[ c ][ "Bottle" ]; // T3[ 0 ][ "Bottle" ]
}

答案 1 :(得分:1)

它是数组内的数组,所以你必须这样做:

$.each(jsondata,function(index,item){

      $.each(item,function(index1,item1){
         if(item1.Can)
            console.log(item1.Can);
         if(item1.Bottle)
            console.log(item1.Bottle);
      });

});

FIDDLE EXAMPLE

<强>更新:

如果您不知道数组中的对象是什么,则必须对数组进行递归迭代:

jQuery recursive iteration over objects

答案 2 :(得分:0)

纯JavaScript解决方案

您想使用Object.keys()方法:

并且,您希望将其与Array.isArray()Array#map()混合:

如果您的环境/浏览器没有ECMAScript 5支持,那么您可以在此处找到多面填充:https://github.com/es-shims/es5-shim

我的方法还使用旧版JavaScript中的以下内容:

以下是您可以使用它的方式:

var result = [];
if (Array.isArray(jsondata.T3)) {
    result = result.concat.apply(result, jsondata.T3.map(function (obj) {
        return Object.keys(obj); // Array of Array of Strings
    }));
    /* Array#concat() used with Function#apply() to reduce
    an Array of Array of Strings down to an Array of Strings */
}
// now, result is Array ['Can', 'Bottle']