【问题标题】:JQ get unique objects and arrays based on key valueJQ 根据键值获取唯一的对象和数组
【发布时间】:2021-12-29 01:24:16
【问题描述】:

存在重复项时,有没有办法返回唯一的对象/数组?这就是我想要做的。

我有一个这样的有效载荷:

{
  "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 获取唯一的对象,这个想法是总结给定日期内的总金额

提前致谢

【问题讨论】:

    标签: json object jq


    【解决方案1】:

    我想做的是通过 .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
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      相关资源
      最近更新 更多