【问题标题】:Accessing Nested Arrays in JSON with jQuery使用 jQuery 访问 JSON 中的嵌套数组
【发布时间】:2011-03-28 17:05:48
【问题描述】:

我确信这是一个简单的问题,所以我提前道歉,甚至提出这个问题。在下面的代码中,我使用 jGFeed 插件将 RSS 提要转换为 JSON。在这个 JSON 中,我需要访问嵌套数组中嵌套数层的 URL 节点。现在,我可以使用 "console.log("feeds.entries[i]")" 在父级别获取每个对象的一些属性(即,“标题”、“内容”等)。我只是不知道如何深入到嵌套数组中。

这是我的代码:

$(document).ready(function() {

    $.jGFeed('http://feeds.feedburner.com/solidverbal/app', function(feeds){
        // Check for errors
        if(!feeds){
        // there was an error
        return false;
        }
        var sAnchors = "<ul>";
        //var wantedFeed = "";
        for(var i=0; i<feeds.entries.length; i++){
            console.log(feeds.entries[i]); 
            var sAnchors = sAnchors + "<li><a href=\"#link\" id=\"title_" + i + "\" class=\"giveFeeds\">" + feeds.entries[i].title + "</a></li>";
        }
        sAnchors = sAnchors + '</ul>';

        //Append the <a>.
        $('#titles').append(sAnchors);

        //When the user clicks on the giveFeeds link....
        $('.giveFeeds').live('click', function(e) {

            //Get the feed number
            var tmpId = $(e.target).attr("id");

            //Returns the value after the '_' char and make sure it returns de number.
            var id = parseInt(tmpId.split("_")[1]);

            //Use the id value to get the desired feed
            var wantedFeed = feeds.entries[id].content;

            //Then do whatever you want with that entry
            $("#content").html(wantedFeed);
        });


    }, 20);
});

以下是显示在 Chrome 控制台中的 JSON 结构示例:

Object
     author: "Test"
     categories: Array[10]
     content: "<p></p><p>Test Content"
     contentSnippet: "Test Content Snippet"
     link: "http://www.solidverbal.com/2011/03/24/charles-robinson-324/"
     mediaGroups: Array[1]
          0: Object
               contents: Array[1]
                    0: Object
                         fileSize: "12796261"
                         type: "audio/mpeg"
                         url: "http://www.testurl/test.mp3"

任何帮助将不胜感激。我认为这是一个嵌套的 for 循环或其他东西,但无论出于何种原因,我都无法理解。

提前致谢!

【问题讨论】:

    标签: jquery json jquery-plugins rss multidimensional-array


    【解决方案1】:

    如果你想迭代每个项目,jQuery 的$.each() 或许可以帮助你实现目标。

    $.each(feed.mediaGroups, function(x, mediaGroup) {
    
        $.each(mediaGroup, function(y, contents) {
    
            $.each(contents, function(z, content){
                alert(content.fileSize);
            });
        });
    });
    

    jsfiddle 上的代码示例。

    【讨论】:

    • 很高兴知道这一点,尽管我不完全确定如何使用我的代码,因为我使用的是 jGFeed 而不是像你在 jsfiddle 示例中那样生成提要。跨度>
    【解决方案2】:

    就像在 Java 或 C# 中导航对象图一样,您可以通过 feeds.entries[0].link 获取 Url 或 feeds.entries[0].mediaGroups[0].contents[0].fileSize

    for (var i = 0; i < feeds.entries.length; i++) {
        var entry = feeds.entries[i];
        for (var j = 0; j < entry.mediaGroups.length; j++) {
            var mediaGroup = entry.mediaGroup[j];
            for (var k = 0; k < mediaGroup.contents.length; k++) {
                var content = mediaGroup.contents[k];
                // do something with content.url.
            }
        }
    }
    

    【讨论】:

    • Carlos,这实际上是我尝试的第一件事,但页面没有显示,Chrome 的控制台抛出错误“Uncaught TypeError: Cannot read property '0' of undefined”
    • 实际上,当我手动输入“0”时它确实有效,但如果我在括号中输入“i”,则会收到 TypeError。我想获取所有链接,而不仅仅是那个...
    • 你能把你的完整代码贴在某个地方吗?我真的没有看到任何问题......
    • solidverbal.com/app/test.html 在 Chrome 中查看,检查控制台。看起来像一个空白页面,但如果您查看控制台,就会看到发生了什么。
    • 我看到的问题是属性的名称是mediaGroups 而不是mediagroups。对不起,这是我的错字。
    猜你喜欢
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多