Eu tenho o seguinte file1 json:
{
"name": "eye",
"attributes": [
{
"name": "Width",
"value": "1920"
},
{
"name": "Height",
"value": "1080"
},
{
"name": "WinKeyMapping",
"value": "leftwin"
}
],
"starts": [
{
"name": "step1",
"attributeList": [
{
"name": "Command",
"value": "bash"
},
{
"name": "Test",
"value": "none"
}
]
}
]
}
e seguinte filtro:
$ jq '.starts[].attributeList[]|select(.name=="Command")' file1
{
"name": "Command",
"value": "bash"
}
$
como eu poderia obter toda a estrutura para esta seleção?
saída esperada:
{
"starts": [
{
"attributeList": [
{
"name": "Command",
"value": "bash"
}
]
}
]
}
Direto com
jq
:A saída:
Aqui estão duas opções para obter a saída desejada.
Você pode excluir as chaves que não deseja:
Ou você pode selecionar apenas a(s) chave(s) que deseja:
Ambos dão o mesmo resultado. Além disso, se você quiser
starts
eends
no último caso, basta adicionaror
declarações adicionais:map(select((.key == "starts") or (.key == "ends")))
.Uma abordagem mais genérica com
jq
:Esta é uma
jq
função que exclui todos os caminhos do documento que não estão em nenhum lugar no caminho do argumento fornecido, que pode ser umaselect()
chamada.Salvando isso em
pick_out.jq
, podemos usá-lo assim:A saída: