Home > other >  JQ: Merging array entities with same attribute name
JQ: Merging array entities with same attribute name

Time:06-07

I have a data structure like this:

[
    {
      "some_id": "123",
      "items_1": [
        {
          "label": "my_name"
        }
      ],
      "items_2": []
    },
    {
      "some_id": "123",
      "items_1": [],
      "items_2": [
        "value_1",
        "value_3"
      ]
    },
    {
      "some_id": "123",
      "items_1": [],
      "items_2": [
        "value_1",
        "value_2"
      ]
    }
]

And I want to modify the data into something like


[
    {
      "some_id": "123",
      "items_1": [
        {
          "label": "my_name"
        }
      ],
      "items_2": [
        "value_1",
        "value_2",
        "value_3"
      ]
    }
]

Basically taking any fields that are the same and concatenating the arrays together. Similarly, items_1 can have some value for the same id down the line and I want to concatenate that array with another if needed.

I have tried using JQ with something like

jq -Mr '[ group_by(.media_url)[] | add | tojson ] | join(",\n")' test.json

However this doesnt seem to be working.

CodePudding user response:

Would the following work for you?

group_by(.some_id) | map({
some_id: map(.some_id) | first,
items_1: map(.items_1) | add | unique,
items_2: map(.items_2) | add | unique })

demo

  • Related