Объединение массивов JSON с одной и той же парой ключ-значение с jq - PullRequest
0 голосов
/ 21 июня 2019

Спасибо ребятам, которые помогли мне с последним вопросом о jq для новичков и дали мне множество объектов:

[
  {
    "any_key":"any_value",
    "group_key":"group_val1"
  },
  {
    "any_key":"any_value",
    "group_key":"group_val1"
  },
  {
    "any_key":"any_value",
    "group_key":"group_val2"
  },
  {
    "any_key":"any_value",
    "group_key":"group_val2"
  }
]

Я изменил ключи и значения из предыдущего вопроса, чтобы попытаться объяснить, где я пытаюсь это сделать.

Я сейчас пытаюсь сгруппировать объекты на основе значения общего ключа. Затем для каждого массива сгруппированных объектов создайте новый объект, в котором массив является значением нового ключа.

Я пытался группировать с помощью "group_by", но это все еще честный путь, откуда я пытаюсь добраться, и я почти уверен, что упускаю некоторые ключевые понятия из jq.

[
  [
    {
      "any_key":"any_value",
      "group_key":"group_val1"
    },
    {
      "any_key":"any_value",
      "group_key":"group_val1"
    }
  ]
]
[
  [
    {
      "any_key":"any_value",
      "group_key":"group_val2"
    },
    {
      "any_key":"any_value",
      "group_key":"group_val2"
    }
  ]
]

Вот где я (мучительно) пытаюсь добраться:

[
  {
    "new_key1":"group_val1",
    "new_key2":[
      {
        "any_key":"any_value",
        "group_key":"group_val1"
      },
      {
        "any_key":"any_value",
        "group_key":"group_val1"
      }
    ]
  },
  {
    "new_key1":"group_val2",
    "new_key2":[
      {
        "any_key":"any_value",
        "group_key":"group_val1"
      },
      {
        "any_key":"any_value",
        "group_key":"group_val2"
      }
    ]
  }
]

Не уверен, что я объяснил это очень ясно ... извините! Но любая помощь будет очень и очень признательна!

1 Ответ

0 голосов
/ 21 июня 2019

Фильтр, который вы, очевидно, ищете, проще, чем вы думаете:

group_by(.group_key)
| map( {new_key1: .[0].group_key,
        new_key2: .} )
...