jq 使用嵌套数组元素的值进行排序

San*_*ena 6 json jq

我需要一些帮助来对jq元素数组进行排序,其中每个元素都包含一个嵌套的 tags元素数组。我的输入 JSON 如下所示:

{
  "result": [
    {
      "name": "ct-1",
      "tags": [
        {
          "key": "service_name",
          "value": "BaseCT"
        },
        {
          "key": "sequence",
          "value": "bb"
        }
      ]
    },
    {
      "name": "ct-2",
      "tags": [
        {
          "key": "service_name",
          "value": "BaseCT"
        },
        {
          "key": "sequence",
          "value": "aa"
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想使用sequence嵌套tags数组中标签的值进行排序,以便输出如下所示:

{
  "result": [
    {
      "name": "ct-2",
      "tags": [
        {
          "key": "service_name",
          "value": "BaseCT"
        },
        {
          "key": "sequence",
          "value": "aa"
        }
      ]
    },
    {
      "name": "ct-1",
      "tags": [
        {
          "key": "service_name",
          "value": "BaseCT"
        },
        {
          "key": "sequence",
          "value": "bb"
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我尝试过以下jq命令:

$ jq '.result |= ([.[] | .tags[] | select(.key == "sequence") | .value] | sort_by(.))' input.json
Run Code Online (Sandbox Code Playgroud)

但我得到以下结果:

{
  "result": [
    "aa",
    "bb"
   ]
}
Run Code Online (Sandbox Code Playgroud)

如果您知道如何处理这种情况,请告诉我。

ogu*_*ail 6

from_entries将键值对数组转换为对象,您可以sort_by像这样使用它:

.result |= sort_by(.tags | from_entries | .sequence)
Run Code Online (Sandbox Code Playgroud)