使用JQuery访问嵌套的JSON项

时间:2011-10-19 19:12:15

标签: jquery json

我一直在搞乱一些aproaches,但没有成功,我在使用JQuery之前已经成功解析了JSON数据,但现在我无法理解它。

使用此代码,

$.each(data, function(headers, item){
    $.each(item, function(){
        console.log(item[i].date_c);
        i++;
    });
});

我可以轻松读取像这样的JSON对象的所有日期:

enter image description here

但是现在我不知道如何在像这样的JSON对象上达到该日期: enter image description here

正如您所看到的,这是一个新的水平。你能救我一下吗?

提前致谢!

---------------- EDIT 感谢您对我的帮助。 JSON很大,但您可以从这里查看它:http://vader.rice.edu/hed2/wormsr/data.php?kw=him-5

523是一个ID,每个项目都有不同的一个;例如,有4个不同的日期对应一个ID。

2 个答案:

答案 0 :(得分:1)

您只是不确定日期会出现在哪里吗?例如如果问题只是让构造中的所有成员对象(无论嵌套多深)命名为“date_c”,那么使用递归。

这未经过测试,但基本逻辑应该有效:只需遍历对象的属性或数组的元素,寻找名为'date_c'的属性。尝试递归到任何可能有孩子的属性或数组元素。

var findThem = function(data) {
    var result=null;
    // skip literals, they have no children
    if (typeof data === 'string' || typeof data === 'number') {
       return;
    }
    if (data && data.constructor && data.constructor.name ==='Array') {
        for(var i=data.length-1;i>=0;i--) {
            findThem(data[i]);
        }
    } else if (typeof data === 'object') {
        foreach (var prop in data) {
           if (data.hasOwnProperty(prop)) {
               if (prop=='date_c') {
                   console.log(data[prop]);
               } else {
                   findThem(data[prop]);
               }
           }
       }
    }
}

答案 1 :(得分:1)

通常,JSON对象中的大多数数据都很有用,格式也很稳定。如果可能的话,我会更正,而不是写一个不同的脚本。

  • 该项目的元素去了哪里?
  • 为什么您的数据'date_c'持有对象突然嵌套得更深?

至于语法:

您可以自由使用运算符或对象的数组访问表示法( []

所以你可以写点像

//first structure
    data['items'][0]['date_c']
//second structure
    data[0][523][3]['date_c']

正如您所看到的,数据只是更深层次嵌套,因此解决方案是添加另一个each,以便您可以再循环一个级别。

// 0 in our example
$.each(jsonData, function(index, firstLevel) {
    //523 in the example
    $.each(firstLevel, function(anotherindex, secondLevel) {
        // 3 in the example
        $.each(secondLevel, function(yetAnotherIndex, thirdLevel) {
            console.log(thridLevel['date_c']);
        });
    });
});

请注意,传递给函数( xxxLevel )的参数是JSON格式的对象。