Предполагая, что вы распаковали свой JSON в Ruby Array of Hashes:
a = [
{:amount => "500.0", :when => "2012-03-13"},
{:amount => "500.0", :when => "2012-03-24"},
{:amount => "100.0", :when => "2012-04-14"},
{:amount => "100.0", :when => "2012-04-16"}
]
Тогда вы можете сделать это:
compressed = a.group_by { |h| h[:when][0,7] }.map do |k, v|
{
:when => k,
:amount => v.inject(0) { |i, h| i + h[:amount].to_i }
}
end
Это оставит вас с этим в compressed
:
[
{:when => "2012-03", :amount => 1000},
{:when => "2012-04", :amount => 200}
]
И вы можете преобразовать это в JSON обычным способом.
group_by
разделяет исходный массив, используя только компоненты года и месяца.Тогда вам просто нужно переставить вещи и суммировать часть сгруппированных хэшей, используя map
и inject
.