加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:31:42 所属栏目:百科 来源:网络整理
导读:我有以下 JSON数据: { "events": { "event": [ { "city":"Birmingham","state":"AL","country":"US","lat":"33.5206608","lng":"-86.80249","status":"Delivered","occured_at":"2012-04-0614:17:00 UTC" },{ "city":"Birmingham","status":"OutFor Deliver
我有以下 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是同一组中所有项的数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读