當存在重復項時,有沒有辦法回傳唯一的物件/陣列?這就是我想要做的。
我有一個這樣的有效載荷:
{
"data": [
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"amount": 7885016,
"block": 470788,
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "DTU1GGfR0eU15hv6KiV_bg6FOJXfUWz4TjIq1H7TGy4",
"timestamp": "2020-08-28T01:29:46.000000Z"
}
]
}
{
"data": [
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"amount": 7885016,
"block": 470788,
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "DTU1GGfR0eU15hv6KiV_bg6FOJXfUWz4TjIq1H7TGy4",
"timestamp": "2020-08-28T01:29:46.000000Z"
}
]
}
{
"data": [
{
"account": "12xUoMKwf12ABjNx4VCvYcNkX79gW1kzz2JnBLxkFbjswRczRvM",
"amount": 8623955,
"block": 470509,
"gateway": "113kQU96zqePySTahB7PEde9ZpoWK76DYK1f57wyhjhXCBoAu88",
"hash": "5fQJY9MprH9b3IstVU1SdfBteUWoF_sdsVuiARPBtTY",
"timestamp": "2020-08-27T19:01:48.000000Z"
}
]
}
如您所見,前 2 個有效載荷是相同的,而最后一個是唯一的。我需要獲取獨特的物件,然后在它們低于特定時間段時總結 .amount。這是我到目前為止所擁有的
jq --arg this "$(date %Y-%m-%dT%H:%M:%S)" '.data[] | select(.timestamp >= $this) | .amount'
這給了我數量,所以我可以總結它們,但它也包含重復項。我想要做的是獲得它們獨特的物件.hash這個想法是總結給定日期內的總金額
提前致謝
uj5u.com熱心網友回復:
我想做的是通過它們的 .hash 獲取唯一的物件
洗掉重復項的一種方法是unique_by/1與 -s 命令列選項結合使用。
假設您想要所有 .data 陣列中的所有專案,您可以使用以下方式啟動管道:
jq -s 'map(.data[]) | unique_by(.hash) ...'
但是,由于您實際上只對 .timestamp 和 .amount 欄位感興趣,因此按照以下方式進行操作會更有效:
jq -s --arg this "$(date %Y-%m-%dT%H:%M:%S)" '
map(.data[] | select(.timestamp >= $this) | {hash, amount})
| unique_by(.hash)[]
| .amount
' input.json
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361230.html
