jq from_entries: отфильтровать поля JSON-объекта
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}
}
}Оставьте только включённые сервисы, сохранив исходный объект с их именами:
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.