【问题标题】:How can I get a single result object in jq?如何在 jq 中获取单个结果对象?
【发布时间】:2023-01-10 22:03:44
【问题描述】:

我有一个这样的 JSON 文件:

{
    "cases": [
        {"id": "1", "count": 2, "ignore": "f"},
        {"id": "2", "count": 7, "ignore": "o"},
        {"id": "3", "count": 11, "ignore": "o"}
    ]
}

jq '.cases[] | { "\(.id)" : .count }' test.json

{
  "1": 2
}
{
  "2": 7
}
{
  "3": 11
}

但是我需要

{ 
  "1": 2, 
  "2": 7, 
  "3": 11 
}

我如何到那里?

【问题讨论】:

  • 尽管之前已经问过这个问题(部分问题),但绝不保证投反对票
  • 那里的答案适合 jq 的第二次单独调用——那里的答案都没有 Inian 在这里的答案所做的那样,也就是说,在同一个 jq 调用中解决问题,因此我投票重新打开。这个问题完全不同。
  • @FelixDombek 同意并重新开放

标签: jq


【解决方案1】:

您需要将结果收集到一个数组中并add他们

.cases | map({ "(.id)" : .count }) | add

【讨论】:

  • 哦,在 cases 之后省略 [] 是重要的成分!
【解决方案2】:

from_entries 听起来是显而易见的选择:

.cases | map({key:.id, value:.count}) | from_entries

【讨论】:

    【解决方案3】:

    这是一种使用 reduce 迭代构建结果对象的方法:

    reduce .cases[] as {$id, $count} ({}; .[$id] = $count)
    

    Demo

    【讨论】:

      猜你喜欢
      • 2012-03-24
      • 1970-01-01
      • 2023-02-23
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 2019-05-13
      相关资源
      最近更新 更多