JSON 为短跑列表汇总
JSON Summarize for Dashing List
我正在创建一个 Dashing 作业,它从 API(运行 Ruby)
中提取一些数据
SCHEDULER.every '15m', :first_in => 0 do |job|
url = "https://blah.com
response = RestClient.get(url, {:Authorization => 'blahblah'})
current_timelist = JSON.parse(response)
acctitems = current_timelist.map do |row|
row = {
:label => row['member']['name'],
:value => row['actualHours']
}
end
# Update the List widget
send_event('timelist', { items: acctitems } )
end
我想根据成员名称进行汇总,但它列出了所有条目。
从 API 接收到的 JSON 如下所示(我已将其缩短,仅更改了名称),请注意 actualHours 可以是 0:
[
{
"member": {
"name": "User 1"
},
"actualHours": 0.2
},
{
"member": {
"name": "User 2"
},
"actualHours": 1.5
},
{
"member": {
"name": "User 2"
},
"actualHours": 0.17
}
]
我也想对这个进行排序,这样我就可以让顶级成员排在最前面等。我还想发送与列表中排名第一的人的第二个事件(这样他们可以获得金星)。
我从你的问题中了解到,你需要这样的聚合
out = h.reduce({}) do |result, item|
key = item[:member][:name]
if result[key].nil?
result[key] = [item[:actualHours]]
else
result[key].push(item[:actualHours])
end
result
end
它将return以下输出
{"User 1"=>[0.2], "User 2"=>[1.5, 0.17]}
您可以对其进行迭代并过滤您需要的内容。
感谢@Stanislav 的代码,因为他的代码构成了我设法开始工作的修复程序的基础。
SCHEDULER.every '15m', :first_in => 0 do |job|
url = "website.com"
response = RestClient.get(url, {:Authorization => 'BlahBlah'})
current_timelist = JSON.parse(response)
time = {}
acctitems = current_timelist.map do |row|
key = row['member']['name']
value = row['actualHours']
if time[key].nil?
time[key] = [value]
else
time[key].push(value)
end
end
resulttime = time.map do |result|
result = {
:label => result[0],
:value => result[1].inject(:+)
}
end
# Update the List widget
send_event('timelist', { items: resulttime })
end
我正在创建一个 Dashing 作业,它从 API(运行 Ruby)
中提取一些数据SCHEDULER.every '15m', :first_in => 0 do |job|
url = "https://blah.com
response = RestClient.get(url, {:Authorization => 'blahblah'})
current_timelist = JSON.parse(response)
acctitems = current_timelist.map do |row|
row = {
:label => row['member']['name'],
:value => row['actualHours']
}
end
# Update the List widget
send_event('timelist', { items: acctitems } )
end
我想根据成员名称进行汇总,但它列出了所有条目。
从 API 接收到的 JSON 如下所示(我已将其缩短,仅更改了名称),请注意 actualHours 可以是 0:
[
{
"member": {
"name": "User 1"
},
"actualHours": 0.2
},
{
"member": {
"name": "User 2"
},
"actualHours": 1.5
},
{
"member": {
"name": "User 2"
},
"actualHours": 0.17
}
]
我也想对这个进行排序,这样我就可以让顶级成员排在最前面等。我还想发送与列表中排名第一的人的第二个事件(这样他们可以获得金星)。
我从你的问题中了解到,你需要这样的聚合
out = h.reduce({}) do |result, item|
key = item[:member][:name]
if result[key].nil?
result[key] = [item[:actualHours]]
else
result[key].push(item[:actualHours])
end
result
end
它将return以下输出
{"User 1"=>[0.2], "User 2"=>[1.5, 0.17]}
您可以对其进行迭代并过滤您需要的内容。
感谢@Stanislav 的代码,因为他的代码构成了我设法开始工作的修复程序的基础。
SCHEDULER.every '15m', :first_in => 0 do |job|
url = "website.com"
response = RestClient.get(url, {:Authorization => 'BlahBlah'})
current_timelist = JSON.parse(response)
time = {}
acctitems = current_timelist.map do |row|
key = row['member']['name']
value = row['actualHours']
if time[key].nil?
time[key] = [value]
else
time[key].push(value)
end
end
resulttime = time.map do |result|
result = {
:label => result[0],
:value => result[1].inject(:+)
}
end
# Update the List widget
send_event('timelist', { items: resulttime })
end