Объединение массивов из потока объектов - PullRequest
2 голосов
/ 30 марта 2020

Я изо всех сил пытаюсь работать с этой немного более сложной json структурой:

{
  "name": "item1",
  "path":
    {"mapping":
      [
        {"position": {"node_id": "1"}, "rank": "1"},
        {"position": {"node_id": "2"}, "rank": "2"},
        {"position": {"node_id": "3"}, "rank": "3"},
        {"position": {"node_id": "6"}, "rank": "4"}
      ]
    }
}

{
  "name": "item2",
  "path":
    {"mapping":
      [
        {"position": {"node_id": "1"}, "rank": "1"},
        {"position": {"node_id": "5"}, "rank": "2"},
        {"position": {"node_id": "3"}, "rank": "3"},
        {"position": {"node_id": "4"}, "rank": "4"}
      ]
    }
}

Все, что я хочу - это уникальные записи "node_ID" в целом, мне все равно, к какому объекту они относятся принадлежат. С [.path.mapping[].position.node_id] я получаю массив для объекта, и я не могу найти ни одного примера того, как объединить их, чтобы использовать unique для них.

Желаемый результат:

1
2
3
4
5
6

Каков наилучший способ достичь этого?

1 Ответ

3 голосов
/ 30 марта 2020

С опцией -n / --null-input вы можете получить входные данные по ключевому слову inputs и создать из них один массив значений. Например:

$ jq -nr '[inputs.path.mapping[].position.node_id] | unique[]' file
1
2
3
4
5
6
...