gpt4 book ai didi

ruby-on-rails - 按数据对 JSON 进行分组?

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:42 25 4
gpt4 key购买 nike

我有以下 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",
"state":"AL",
"country":"US",
"lat":"33.5206608",
"lng":"-86.80249",
"status":"Out
For Delivery",
"occured_at":"2012-04-06 04:44:00 UTC"
},
{
"city":"Birmingham",
"state":"AL",
"country":"US",
"lat":"33.5206608",
"lng":"-86.80249",
"status":"Arrival
Scan",
"occured_at":"2012-04-05 19:07:00 UTC"
},
{
"city":"Doraville",
"state":"GA",
"country":"US",
"lat":"33.8981579",
"lng":"-84.2832564",
"status":"Departure
Scan",
"occured_at":"2012-04-05 17:08:00 UTC"
},
{
"city":"Doraville",
"state":"GA",
"country":"US",
"lat":"33.8981579",
"lng":"-84.2832564",
"status":"Arrival
Scan",
"occured_at":"2012-04-05 11:15:00 UTC"
},
{
"city":"Spartanburg",
"state":"SC",
"country":"US",
"lat":"34.9495672",
"lng":"-81.9320482",
"status":"Departure
Scan",
"occured_at":"2012-04-05 08:42:00 UTC"
},
{
"city":"Spartanburg",
"state":"SC",
"country":"US",
"lat":"34.9495672",
"lng":"-81.9320482",
"status":"Arrival
Scan",
"occured_at":"2012-04-05 08:21:00 UTC"
},
{
"city":"Greensboro",
"state":"NC",
"country":"US",
"lat":"36.0726354",
"lng":"-79.7919754",
"status":"Departure
Scan",
"occured_at":"2012-04-05 04:45:00 UTC"
},
{
"city":"Greensboro",
"state":"NC",
"country":"US",
"lat":"36.0726354",
"lng":"-79.7919754",
"status":"Origin
Scan",
"occured_at":"2012-04-05 00:11:00 UTC"
},
{
"city":null,
"state":null,
"country":"US",
"status":"Billing
Information Received",
"occured_at":"2012-04-04 18:20:27 UTC"
}
]
}
}

我需要做的是按城市、州和国家/地区的组合对数据进行分组,但仍然返回每个项目的数据。

因此,例如,按“伯明翰,阿拉巴马州,美国”分组,但仍然能够遍历每个事件的状态(即已交付、外出交付、到达扫描)那个。

最佳答案

你想要的魔法是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,US': 2 events
#=> --> Departure Scan, Arrival Scan
#=> 'Greensboro,NC,US': 2 events
#=> --> Departure Scan, Origin Scan
#=> ',,US': 1 event
#=> --> Billing Information Received

注意,上面的locgroup_by评估的block返回的三元素数组,events是一个同一组中所有项目的数组。

关于ruby-on-rails - 按数据对 JSON 进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10116676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com