【问题标题】:Combining outputs into single hash/dictionary JQ将输出组合成单个哈希/字典 JQ
【发布时间】:2018-09-28 02:24:40
【问题描述】:

所以我有一个看起来像这样的 json 对象:

[{
    "size": "77824",
    "module": "rfcomm",
    "depcount": "4",
    "deps": []
}, {
    "size": "98304",
    "module": "scsi_transport_iscsi",
    "depcount": "4",
    "deps": []
}, {
    "size": "16384",
    "module": "xt_conntrack",
    "depcount": "1",
    "deps": ["nouveau", "i915"]
}]

我可以使用下面的 jq 规则 .[] | { (.module) : (.deps | join(",")) } 到一系列看起来像这样的对象

{
  "rfcomm": ""
}
{
  "scsi_transport_iscsi": ""
}
{
  "xt_conntrack": "nouveau,i915"
}

我添加了jq play example 我看到的内容。

我希望它获得组合这些对象的输出。所以像:

{
  "rfcomm": "",
  "scsi_transport_iscsi": "",
  "xt_conntrack": "nouveau,i915"
}

我是一个 jq 新手,所以我确信有办法做到这一点,但我不知道该怎么做。

【问题讨论】:

    标签: json dictionary jq


    【解决方案1】:

    一种可能性:

    [.[] | { (.module) : (.deps | join(",")) }] | add
    

    【讨论】:

      【解决方案2】:

      另一种可能性(某种功能方法):

      reduce .[] as $elem ({}; . + { ($elem.module): $elem.deps | join(",") })
      

      一般语法是:

      reduce inputs as $elem (INIT; REDUCER)
      
      • INIT 输出变量的初始值可以是例如[]{}
      • REDUCER 在每个元素上执行的代码 . + 确保它被附加到中间结果(输出)

      【讨论】:

        猜你喜欢
        • 2017-07-13
        • 2011-02-25
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 2017-12-23
        • 2021-11-24
        相关资源
        最近更新 更多