2011-11-27 45 views
1

我有一個JSON提要,我正在解析。下面是下面的代碼示例:Rails中的數組邏輯(通過JSON)

JSON

[ 
    { 
     "global_event":{ 
     "ending_at":"2011-11-07T02:00:00Z", 
     "short_url":"http://bit.ly/reAhRw", 
     "created_at":"2011-10-04T14:25:41Z", 
     "event_responses":[ 

     ], 
     "addresses":{ 
      "location":{ 
       "city":"blah", 
       "latitude":30.205288, 
       "zipcode":"343434", 
       "street":"blah", 
       "longitude":-95.475289, 
       "state":"TX" 
      } 
     }, 
     "body":"blahblahblah", 
     "euid":"2f489d0c82d167f1c16aba5d3b4c29ade6f1d52a", 
     "title":"Fusion", 
     "updated_at":"2011-10-04T14:26:57Z", 
     "event_roles":[ 

     ], 
     "user":{ 
      "long_name":"Fusion Single", 
      "nickname":"" 
     }, 
     "event_items":[ 

     ], 
     "starting_at":"2011-11-07T00:00:00Z" 
     } 
    } 
] 

控制器

def events 
    @json = ActiveSupport::JSON.decode(open('jsonfeed').read) 
end 

查看

<ul class="events"> 
    <% @json.each do |event| %> 
     <% event.each do |e, d| %> 
      <li> 
       <h4><%= d['starting_at'].to_date.strftime('%A') %></h4> 
        <small><%= d['starting_at'].to_date.strftime('%b %d') %></small> 
        <p> 
         <%= link_to d['title'], d['short_url'] %> <span style="font-size: 12px; padding: 0 10px; font-weight: bold;">|</span> 
         <%= d['starting_at'].to_date.strftime('%I:%M %p') %> 
        </p> 
      </li> 
     <% end %> 
    <% end %> 
</ul> 

Finall Ÿ,所有這些都已到位,它的工作完美無缺。下面是我的輸出如下:enter image description here

所以,最後我的問題:正如你在截圖中看到,這兩個項目被打印到屏幕上具有相同的日期(1月14日)。我想要做的是將兩者結合起來。因此,我最終的輸出結果將具有「星期六」,其下面列出了兩個事件。謝謝您的幫助!

+0

你有沒有試過這個:http://stackoverflow.com/questions/3884829/grouping-a-ruby-array –

回答

1

下面的代碼應該按日期幫助你將你的活動:

控制器

def events 
    @json = ActiveSupport::JSON.decode(open('jsonfeed').read).group_by {|e| e["global_event"]["starting_at"].to_date.strftime('%Y-%m-%d') } 
end 

產生的數據結構:

{"2011-11-07"=> 
    [{"global_event"=> 
    { 
     "ending_at"=>"2011-11-07T02:00:00Z", 
     "short_url"=>"http://bit.ly/reAhRw", 
     "created_at"=>"2011-10-04T14:25:41Z", 
     "event_responses"=>[], 
     "addresses"=> 
     {"location"=> 
     {"city"=>"blah", 
      "latitude"=>30.205288, 
      "zipcode"=>"343434", 
      "street"=>"blah", 
      "longitude"=>-95.475289, 
      "state"=>"TX" 
     } 
     }, 
     "body"=>"blahblahblah", 
     "euid"=>"2f489d0c82d167f1c16aba5d3b4c29ade6f1d52a", 
     "title"=>"Fusion", 
     "updated_at"=>"2011-10-04T14:26:57Z", 
     "event_roles"=>[], 
     "user"=>{"long_name"=>"Fusion Single", "nickname"=>""}, 
     "event_items"=>[], 
     "starting_at"=>"2011-11-07T00:00:00Z" 
    } 
    }] 
} 

查看

<ul class="events"> 
    <% @json.each do |date, events| %> 
     <li> 
      <h4><%= date.to_date.strftime('%A') %></h4> 
      <small><%= date.to_date.strftime('%b %d') %></small> 
       <% events.each do |e| %> 
        <p> 
         <%= link_to e['global_event']['title'], e['global_event']['short_url'] %> <span style="font-size: 12px; padding: 0 10px; font-weight: bold;">|</span> 
         <%= e['global_event']['starting_at'].to_date.strftime('%I:%M %p') %> 
        </p> 
       <% end %> 
     </li> 
    <% end %> 
</ul> 
+0

謝謝你的代碼,但它實際上打印出所有的東西,就像我的代碼打印出來一樣Oo – John

+0

@johnernaut它不應該是這樣,你可以添加更多的事件到你的JSON事件?我可能在那裏做了一個錯誤的假設。 –

+0

嗨Benoit,我回到這個項目後,在其他事情上工作了一段時間,發現你的答案其實是正確的。非常感謝你的幫助! – John