簡體   English   中英

如何使用jq根據json中的值進行分組?

[英]How to group by based on value in json using jq?

我有以下json

[
      {
        "certname": "server1",
        "environment": "production",
        "name": "memorysize",
        "value": "62.76 GiB"
      },
      {
        "certname": "server1",
        "environment": "production",
        "name": "processorcount",
        "value": 12
      },
      {
        "certname": "server2",
        "environment": "production",
        "name": "memorysize",
        "value": "62.76 GiB"
      },
      {
        "certname": "server2",
        "environment": "production",
        "name": "processorcount",
        "value": 10
      }
    ]

我想轉換為按證書名稱分組的這種格式。 挑戰是我需要使用 value for 使其作為關鍵,如下所示

    [
      {
        "certname": "server1",
        "memorysize": "62.76 GiB",
        "processorcount": 12
      },
      {
        "certname": "server2",
        "memorysize": "62.76 GiB",
        "processorcount": 10
      }
    ]

我如何使用 jq 做到這一點? 我試過 to_entries 但它也無濟於事。

謝謝

下面是一個帶注釋的 jq 腳本。 隨意使用它,或者去掉換行符和注釋並按原樣使用它。

# First, we construct an object that maps each `$certname` to `{certname: $certname}`. We name it $init.

(map({key:.certname, value: {certname}}) | unique | from_entries) as $init |

# Next, we take each object of the input in turn (name it $attr) and assign its
# `name:value` into one of the objects.
# $init is the dictionary above
# Reduce will pass the current dictionary as . for each invocation, and the assignment
# returns the input object.

reduce .[] as $attr ($init; .[$attr.certname][$attr.name] = $attr.value) |

# Our initial dictionary has now been expanded with attributes.
# Map it back to an array of objects. .[] is a stream of objects,
# we capture that in an outer array.

[.[]]

暫無
暫無

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

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