簡體   English   中英

JQ 根據鍵值獲取唯一對象和 arrays

[英]JQ get unique objects and arrays based on key value

當存在重復項時,有沒有辦法返回唯一的對象/數組? 這就是我想要做的。

我有一個這樣的有效載荷:

{
  "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獲取唯一的對象這個想法是總結給定日期內的總金額

提前致謝

我想要做的是通過 their.hash 獲得唯一的對象

刪除重復項的一種方法是將unique_by/1與 -s 命令行選項結合使用。

假設您想要所有 the.data arrays 中的所有項目,您可以使用以下命令開始您的管道:

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


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM