Извлечение частичных данных из данных формата JSON с помощью jq

Если вам разрешено хранить секреты на жестком диске, вы можете использовать ключи в домашней папке.ssh, чтобы пропустить аутентификацию по паролю. Именно такой должна быть не -интерактивная аутентификация от машины к машине.

0
18.10.2021, 10:30
2 ответа

Ваша команда перебирает каждый из элементов массива для каждого из четырех указанных вами элементов, поэтому вместо получения трех объектов вы получаете 3 4 = 81 объект.

Чтобы выполнить итерацию по каждому объекту, вы можете использовать map()функцию, например:

jq 'map({IP:.ip, STATUS:.status, SOFTWARE:.info.software.version, KERNEL:.info.kernel})' json.data

[
  {
    "IP": "10.240.82.192",
    "STATUS": "PASS",
    "SOFTWARE": "1.0.0",
    "KERNEL": "5.0.0"
  },
  {
    "IP": "10.240.82.193",
    "STATUS": "PASS",
    "SOFTWARE": "1.0.0",
    "KERNEL": "5.0.3"
  },
  {
    "IP": "10.240.82.194",
    "STATUS": "PASS",
    "SOFTWARE": "1.0.2",
    "KERNEL": "5.0.1"
  }
]
2
18.10.2021, 10:46

Ответ @roaima хорошо объясняет это, в качестве альтернативы вы можете написать решение следующим образом:

jq '[.[] | {IP:.ip, STATUS:.status, SOFTWARE:.info.software.version, KERNEL:.info.kernel} ]' json.data

Здесь часть .[]выполняет итерацию по всем элементам ввода, а внешняя часть [], обертывающая весь результат, преобразует его в массив.

0
18.10.2021, 17:38

Теги

Похожие вопросы