我正在尝试解析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。
答案 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}