【问题标题】:Can we read values from this type of JSON array我们可以从这种类型的 JSON 数组中读取值吗
【发布时间】:2014-07-26 05:27:21
【问题描述】:

我有以下 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++)
{


}

但我还是想问这能不能做到??

【问题讨论】:

    标签: jquery


    【解决方案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" ]
    }
    

    【讨论】:

    • 嗨,我是这样使用你的函数的,请看 jsfiddle jsfiddle.net/AyuAY,从获得的结果中我可以从中提取 Can 和 Bottle 吗??
    • 我的意思是,如果这条线被执行 var result = jsondata.item.T1[a].T2[b].T3[ c ]; ,它产生两个数组 {"Can":[{"type":"coke can 250ml"},{"type":"coke can 100ml"}]} 和 {"Bottle":[{"type":"coke bottle 250ml"},{"type":"coke bottle 100ml"}]} ,所以我可以从获得的数组中提取值 Can 和 bottle 。 (我需要这个,因为 Can 和 Bottle 将从数据库中动态获取,我不知道可能存在哪些值)
    • 当然可以 - 您只需将它们作为普通 JS 对象引用即可。
    • 那么我应该创建一个数组并推送结果吗?但是我怎样才能从中获取 Can 和 Bottle 呢??
    • 您应该将结果放在代码中任何有意义的地方。与您之前访问它的方式相同:some_obj[ "Can" ]
    【解决方案2】:

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

    $.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

    【讨论】:

    • 我知道 Can 和 Bottle 的值仅在开发时存在。在动态读取时我不知道这个值是否存在。
    • 你可以检查if(item.Can) { // then log }
    • 感谢更新,我动态地阅读了这个(从数据库数据创建的 JSON),所以我真的不知道是否存在 can 或存在其他值。
    • 你有信息可以返回多少种类型的对象吗??
    • 不完全是,但如果需要我可以为此进行数据库查询。
    【解决方案3】:

    纯 JavaScript 解决方案

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

    而且,您需要将其与 Array.isArray()Array#map() 混合使用:

    如果您的环境/浏览器不支持 ECMAScript 5,那么您可以在这里找到一个 poly-fill: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']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 2020-09-09
      • 2018-06-27
      相关资源
      最近更新 更多