2011-03-28 16 views
1

これは簡単な問題だと確信していますので、事前に尋ねても謝ります。以下のコードでは、jFeedプラグインを使用してRSSフィードをJSONに変換しています。このJSON内では、ネストされた配列の中に深く入れ子になったURLノードにアクセスする必要があります。今は、 "console.log(" feeds.entries [i] ")"を使用して、親レベルの各オブジェクトの属性(「タイトル」、「コンテンツ」など)を取得できます。ネストされた配列にドリルダウンする方法を知ることはできません。jQueryを使用したJSONのネストされた配列へのアクセス

これは私のコードです:それはクロームコンソール内に表示されるようここ

$(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); 
}); 

は、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-loopまたは何かだと思っていますが、何らかの理由で私はそれを得ることができません。

ありがとうございます!

答えて

1

それはあなたが各項目の反復処理したい場合はjQueryの$.each()はあなたを助けることができるかもしれないだけで、JavaやC#でオブジェクトグラフをナビゲートするように、URLを取得するためにfeeds.entries[0].linkを行うことができているか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. 
     } 
    } 
} 
+0

カルロス、実際に私が試した最初のものでしたが、ページが表示されず、Chromeのコンソールで「Uncaught TypeError:未定義のプロパティ '0'を読み取れません」というエラーが発生しました – ndisdabest

+0

実際には、私は手動で "0"を入れますが、 "i"を角かっこに入れると、私はTypeErrorを得ています。私はすべてのリンクを手に入れたいと思います。 – ndisdabest

+0

あなたは完全なコードをどこかに投稿できますか?私は本当に何か問題は全く見ません... – CarlosZ

3

目標を達成する。

$.each(feed.mediaGroups, function(x, mediaGroup) { 

    $.each(mediaGroup, function(y, contents) { 

     $.each(contents, function(z, content){ 
      alert(content.fileSize); 
     }); 
    }); 
}); 

jsfiddle上のコード例。

+0

jGFeedを使用していて、jsfiddleの例のようにフィードを生成していないので、これを自分のコードでどうやって得るのかが完全にはわかりませんが、これは知っておいてよかったです。 – ndisdabest

関連する問題