Ruby on rails 根据数据将JSON分组为新对象
我有一些JSON数据存储日期时间字符串和总计。e、 gRuby on rails 根据数据将JSON分组为新对象,ruby-on-rails,json,Ruby On Rails,Json,我有一些JSON数据存储日期时间字符串和总计。e、 g [{ "Date": "2012-04-01 12:00:00", "Total": "14" }, { "Date": "2012-04-02 06:00:00", "Total": "3" }, { "Date": "2012-04-02 14:00:00", "Total": "12" }, { "Date": "2012-04-02 16:00:00", "Total"
[{
"Date": "2012-04-01 12:00:00",
"Total": "14"
}, {
"Date": "2012-04-02 06:00:00",
"Total": "3"
}, {
"Date": "2012-04-02 14:00:00",
"Total": "12"
}, {
"Date": "2012-04-02 16:00:00",
"Total": "5"
}, {
"Date": "2012-04-02 17:00:00",
"Total": "7"
}, {
"Date": "2012-04-03 06:00:00",
"Total": "9"
}, {
"Date": "2012-04-03 14:00:00",
"Total": "2"
}, {
"Date": "2012-04-04 06:00:00",
"Total": "1"
}, {
"Date": "2012-04-04 14:00:00",
"Total": "10"
}, {
"Date": "2012-04-04 19:00:00",
"Total": "8"
}, {
"Date": "2012-04-04 21:00:00",
"Total": "4"
}]
我想做的是为同年、同月、同日的数据创建新的JSON对象
例如,一整套数据可以格式化为:
日期:
月份:
[{
"Date": "2012-04"
"Total": "36"
},{
"Date": "2012-05"
"Total": "11"
},{
"Date": "2012-06"
"Total": "23"
},{
"Date": "2012-07"
"Total": "17"
}]
年份:
我怎样才能做到这一点是Rails如果我能得到一个我可以做其中一个的例子,那么我就可以以此为基础来做其他的强>
因此,在控制器中,我有:
def get_count_day
render json: data.to_json
end
def get_count_month
render json: data.to_json
end
def get_count_year
render json: data.to_json
end
下面是一个按天分组检索它们的示例:
grouped_json = Hash.new(0)
your_json_array.each do |array_element|
date = Date.parse(array_element['Date']).strftime('%Y-%m-%d')
grouped_json[date] += array_element['Total']
end
grouped_json.map {|k,v| {'Date' => k, 'Total' => v} }
按月计算
grouped_json = Hash.new(0)
your_json_array.each do |array_element|
date = Date.parse(array_element['Date']).strftime('%Y-%m')
grouped_json[date] += array_element['Total']
end
grouped_json.map {|k,v| {'Date' => k, 'Total' => v} }
每年
grouped_json = Hash.new(0)
your_json_array.each do |array_element|
date = Date.parse(array_element['Date']).strftime('%Y')
grouped_json[date] += array_element['Total']
end
grouped_json.map {|k,v| {'Date' => k, 'Total' => v} }
嘿,你今天可以试试这种方法
given_json.group_by{|b| b["Date"].to_date.strftime("%Y-%d-%m")}.collect{|key,value| {"Date" =>key , "Total" => value.sum{|d| d["Total"].to_i}}}
一个月
given_json.group_by{|b| b["Date"].to_date.strftime("%Y-%m")}.collect{|key,value| {"Date" =>key , "Total" => value.sum{|d| d["Total"].to_i}}}
一年
given_json.group_by{|b| b["Date"].to_date.strftime("%Y")}.collect{|key,value| {"Date" =>key , "Total" => value.sum{|d| d["Total"].to_i}}}
json
这是您在问题中发布的哈希数组在您的情况下,我认为它将是data.group_by…
如果data
是{“Date”:“2012-04-01 12:00:00”,“Total”:“14”},{“Date”:“2012-04-02 06:00:00”,“Total”:“3”}..…]
我目前正在从CSV中提取JSON,比如:JSON=CSV.open(Rails.public_path+'testData.CSV',:headers=>true)。将{x | x.to_h}映射到{u JSON
所以它应该是发布的JSON。然后它应该在JSON
本身上工作。我在你发布的数据上试过了如果数据是那种格式,
given_json.group_by{|b| b["Date"].to_date.strftime("%Y-%d-%m")}.collect{|key,value| {"Date" =>key , "Total" => value.sum{|d| d["Total"].to_i}}}
given_json.group_by{|b| b["Date"].to_date.strftime("%Y-%m")}.collect{|key,value| {"Date" =>key , "Total" => value.sum{|d| d["Total"].to_i}}}
given_json.group_by{|b| b["Date"].to_date.strftime("%Y")}.collect{|key,value| {"Date" =>key , "Total" => value.sum{|d| d["Total"].to_i}}}