jq сортировка по значению вложенного элемента массива - PullRequest
1 голос
/ 01 ноября 2019

Мне нужна помощь с использованием 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"
        }
      ]
    }
  ]
}

Я бы хотел отсортировать, используя значение тега 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"
        }
      ]
    }
  ]
}

Я пробовал следующую команду jq:

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

, но получаю следующий результат:

{
  "result": [
    "aa",
    "bb"
   ]
}

Пожалуйста, дайте мне знать, если вы знаете, как поступитьэтот сценарий.

1 Ответ

1 голос
/ 01 ноября 2019

from_entries преобразует массив пар ключ-значение в объект, вы можете использовать его с sort_by следующим образом:

.result |= sort_by(.tags | from_entries | .sequence)
...