2016-09-06 6 views
1

日付の文字列と合計を格納するJSONデータがあります。例えばJSONをデータに基づく新しいオブジェクトとしてグループ化します

[{ 
    "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オブジェクトを作成することです。

したがって、たとえば、データの完全なセットがにフォーマットすることができます

DAY:

[{ 
    "Date": "2012-04-01" 
    "Total": "3" 
},{ 
    "Date": "2012-04-02" 
    "Total": "4" 
},{ 
    "Date": "2012-04-03" 
    "Total": "6" 
}] 

MONTH:

[{ 
    "Date": "2012-04" 
    "Total": "36" 
},{ 
    "Date": "2012-05" 
    "Total": "11" 
},{ 
    "Date": "2012-06" 
    "Total": "23" 
},{ 
    "Date": "2012-07" 
    "Total": "17" 
}] 

はYEAR:

[{ 
    "Date": "2012" 
    "Total": "91" 
},{ 
    "Date": "2013" 
    "Total": "102" 
},{ 
    "Date": "2014" 
    "Total": "78" 
}] 

どのように可能性があり私はこれをレールですか? もし私がそれらの1つをどうやって行うことができるかの例を得ることができれば、それを他の人のためにベースとして使うことができます!

は、だから私は持っているコントローラで:

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 

答えて

1

ねえ、あなたが、私はエラーを取得する年

given_json.group_by{|b| b["Date"].to_date.strftime("%Y")}.collect{|key,value| {"Date" =>key , "Total" => value.sum{|d| d["Total"].to_i}}} 
0

ここで彼らは日ごとにグループ化された取得するための例です:

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} } 
2
count_by_day = 
    json.group_by{ |record| record[:Date].to_date.strftime } 
     .map { |k, v| { Date: k, Total: v.map { |y| y[:Total].to_i }.sum.to_s } } 

#=> [{:Date=>"2012-04-01", :Total=>"14"}, {:Date=>"2012-04-02", :Total=>"27"}, {:Date=>"2012-04-03", :Total=>"11"}, {:Date=>"2012-04-04", :Total=>"23"}] 

count_by_month = 
    json.group_by{ |record| record[:Date].to_date.strftime('%Y-%m') } 
     .map { |k, v| { Date: k, Total: v.map { |y| y[:Total].to_i }.sum.to_s } } 

#=> [{:Date=>"2012-04", :Total=>"75"}] 

count_by_year = 
    json.group_by{ |record| record[:Date].to_date.strftime('%Y') } 
     .map { |k, v| { Date: k, Total: v.map { |y| y[:Total].to_i }.sum.to_s } } 

#=> [{:Date=>"2012", :Total=>"75"}] 
+0

の月

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}}} 

について '未定義のメソッドGROUP_BYをデイ

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}}} 

のためにこの方法を試すことができます' – Cameron

+0

ここで 'json'はあなたの質問で –

+0

という質問に投稿したハッシュの配列です。' data'が '{ "の場合は 'data.group_by ....' 「01」、「01」、「04」、「12:00:00」、「 」、「合計」:「14」 、「 」、「2012-04-02 06:00:00」、 「合計」:「3」 } .....] –

関連する問題