jq from_entries: отфильтровать поля JSON-объекта

Категория: Bash · Язык: Bash · Обновлено:

to_entries превращает объект в массив пар key/value, а from_entries собирает объект обратно после фильтрации. Так можно проверять поля каждого значения и сохранять имена исходных ключей вместо выдачи результата массивом.

Пусть в config.json есть объект services, у которого значения содержат флаг enabled:

Текст
{
  "services": {
    "api": {"enabled": true, "port": 8080},
    "worker": {"enabled": false, "port": 9000},
    "docs": {"enabled": true, "port": 3000}
  }
}

Оставьте только включённые сервисы, сохранив исходный объект с их именами:

Bash
jq '.services | to_entries | map(select(.value.enabled == true)) | from_entries' config.json

На выходе останется объект с ключами api и docs. Укороченная запись той же операции — with_entries(select(.value.enabled == true)). from_entries ожидает массив объектов с ключами key и value; произвольный массив без такой структуры не преобразуется. См. jq 1.8 Manual.