ruby-on-rails – 按数据分组JSON?

我有以下 JSON数据:

{
  "events":
  {
      "event":
      [
          {
              "city":"Birmingham","state":"AL","country":"US","lat":"33.5206608","lng":"-86.80249","status":"Delivered","occured_at":"2012-04-06
14:17:00 UTC"
          },{
              "city":"Birmingham","status":"Out
For Delivery","occured_at":"2012-04-06 04:44:00 UTC"
          },"status":"Arrival
Scan","occured_at":"2012-04-05 19:07:00 UTC"
          },{
              "city":"Doraville","state":"GA","lat":"33.8981579","lng":"-84.2832564","status":"Departure
Scan","occured_at":"2012-04-05 17:08:00 UTC"
          },"occured_at":"2012-04-05 11:15:00 UTC"
          },{
              "city":"Spartanburg","state":"SC","lat":"34.9495672","lng":"-81.9320482","occured_at":"2012-04-05 08:42:00 UTC"
          },"occured_at":"2012-04-05 08:21:00 UTC"
          },{
              "city":"Greensboro","state":"NC","lat":"36.0726354","lng":"-79.7919754","occured_at":"2012-04-05 04:45:00 UTC"
          },"status":"Origin
Scan","occured_at":"2012-04-05 00:11:00 UTC"
          },{
              "city":null,"state":null,"status":"Billing
information Received","occured_at":"2012-04-04 18:20:27 UTC"
          }
      ]
  }
}

我需要做的是通过城市,州和国家的组合对数据进行分组,但仍然返回每个项目的数据.

例如,分组由“伯明翰,美国AL,美国”,但仍然能够迭代每个事件的状态(即交付,交付交付,到达扫描).

解决方法

你想要的魔力是 Enumerable#group_by

require 'json'
all = JSON.parse(DATA.read)['events']['event']
all.group_by{ |h| [h['city'],h['state'],h['country']] }.each do |loc,events|
  puts "'#{loc.join(',')}': #{events.length} event#{:s if events.length!=1}"
  print "--> "
  puts events.map{ |e| e['status'] }.join(',')
end

#=> 'Birmingham,AL,US': 3 events
#=> --> Delivered,Out For Delivery,Arrival Scan
#=> 'Doraville,GA,US': 2 events
#=> --> Departure Scan,Arrival Scan
#=> 'Spartanburg,SC,Arrival Scan
#=> 'Greensboro,NC,Origin Scan
#=> ',US': 1 event
#=> --> Billing information Received

请注意,在上面,loc是从group_by计算的块返回的三元素数组,而events是同一组中所有项的数组.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...