Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 根据数据将JSON分组为新对象_Ruby On Rails_Json - Fatal编程技术网

Ruby on rails 根据数据将JSON分组为新对象

Ruby 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"

我有一些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": "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}}}