試圖解決問題,但甚至不知道如何開始。我有這樣的json
[
{
"Count": "226",
"Action": "1",
"Status": "1",
"Client": "26"
},
{
"Count": "224",
"Action": "1",
"Status": "2",
"Client": "26"
},
{
"Count": "3",
"Action": "1",
"Status": "6",
"Client": "26"
},
{
"Count": "233",
"Action": "2",
"Status": "1",
"Client": "26"
},
{
"Count": "7",
"Action": "2",
"Status": "2",
"Client": "26"
}
]
而且我需要獲取狀態> 1的不同操作的計數器總和。結果應該替換匯總元素。結果示例:
[
{
"Count": "226",
"Action": "1",
"Status": "1",
"Client": "26"
},
{
"Count": "227",
"Action": "1",
"Status": "2",
"Client": "26"
},
{
"Count": "233",
"Action": "2",
"Status": "1",
"Client": "26"
},
{
"Count": "7",
"Action": "2",
"Status": "2",
"Client": "26"
}
]
如您所見,“操作”:“1”和“狀態”:“2”的元素中的欄位計數在“操作”:“1”和“狀態”:“6”的物件的值上增加
我不知道該怎么做。任何幫助或建議將不勝感激。
uj5u.com熱心網友回復:
此解決方案聚合到每個重復串列中的第一個專案中(這從您的示例資料中并不明顯,請參閱評論)。
group_by對要聚合的專案進行分組,這由.Status更大1和 的內容決定.Action。然后,對于map每個分組串列的第一個 ( .[0]) 專案的.Count欄位是通過add計算所有.Count欄位的值來計算的。每個組中的輸出是第一個 ( .[0]) 元素。
jq '
group_by([(.Status | tonumber > 1), .Action])
| map(.[0].Count = (map(.Count | tonumber) | add | tostring) | .[0])
'
[
{
"Count": "226",
"Action": "1",
"Status": "1",
"Client": "26"
},
{
"Count": "233",
"Action": "2",
"Status": "1",
"Client": "26"
},
{
"Count": "227",
"Action": "1",
"Status": "2",
"Client": "26"
},
{
"Count": "7",
"Action": "2",
"Status": "2",
"Client": "26"
}
]
演示
由于.Statusand是字串,而不是數字,因此有必要使用and.Count來回轉換它們。您可能希望,特別是如果您有更多的計算要處理,首先將它們轉換為數字,然后進行所有(現在更簡單)處理,最后將它們轉換回來(如果需要)。tonumbertostring
jq '
map((.Status, .Count) |= tonumber)
| group_by([(.Status > 1), .Action])
| map(.[0].Count = (map(.Count) | add) | .[0])
| map((.Status, .Count) |= tostring)
'
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/412235.html
標籤:
