在ruby中拆分多维数组

时间:2017-11-21 12:05:27

标签: ruby-on-rails json ruby

我正在尝试解析ruby中的json数据,我想要的输出是:

var events = {  '01-01-2018' : 
                [ {content: 'Psalm 2',  allDay: true},
                  {content: 'by ToddWagner', allDay: true}
                ],
                '01-02-2018' :
                [ {content: 'Psalm 2', allDay: true},
                  {content: 'by ToddWagner', allDay: true}
                                            ]
                        }

我得到的是

var events = [
                {"2017-11-03":
                        [ {"content":"Romans 14:5-12","allDay":true},
                          {"content":"by Micah Leiss","allDay":true}
                            ]
                        },
                {"2017-11-06":
                       [{"content":"Romans 14:13","allDay":true},
                        {"content":"by Sarah Thomas","allDay":true}
                        ]
                }
            ]

我试过像

这样的东西
data = [] 
raw_data['entries'].each do |entry|
    data << {entry_date => [
                                {
                                  "content" => entry.title,
                                  "allDay" => true,
                                },
                                {                                                           
                                  "content" => entry.writer,
                                  "allDay" => true,
                                },
                            ]
                        }
end
data.to_json

但是我没有得到理想的结果,我也尝试了data.pop data.shift。

2 个答案:

答案 0 :(得分:2)

Ruby实现看起来像:

data = raw_data['entries'].map do |entry|
  [entry.date,  [entry.title, entry.writer].map do |content|
                  {content: content, allDay: true}
                end]
end.to_h

答案 1 :(得分:1)

首先,正在向您的数组data添加字段,正如我从您想要的输出中看到的那样,您需要一个哈希值。

您必须创建哈希,而不是数组:

data = {}

然后在你的循环中

raw_data['entries'].each do |entry|

像那样添加

data[entry_date] = [   
                     {
                       "content" => entry.title,
                       "allDay" => true,
                     },
                     {                                                           
                       "content" => entry.writer,
                       "allDay" => true,
                     },
                   ]

(我不是你在你的例子中声明entry_date的地方所以它可能是entry.date)

我无法从您的示例中判断输入日期是否唯一(我认为不是)确保您添加哈希值,因为您可能会覆盖它。

如果输入日期不是唯一

,您可以执行此类操作
data[entry.date] ||= []
data[entry.date] << {hash_you_need}