entrada json:
[
{
"name": "cust1",
"grp": [
{
"id": "46",
"name": "BA2"
},
{
"id": "36",
"name": "GA1"
},
{
"id": "47",
"name": "NA1"
},
{
"id": "37",
"name": "TR3"
},
{
"id": "38",
"name": "TS1"
}
]
}
]
esperado, na saída são duas linhas:
name: cust1
groups: BA2 GA1 NA1 TR3 TS1
Eu estava tentando construir filtro sem sucesso..
$ jq -r '.[]|"name:", .name, "groups:", (.grp[]|[.name]|@tsv)' test_json
name:
cust1
groups:
BA2
GA1
NA1
TR3
TS1
Atualização: a solução fornecida abaixo funciona bem, mas não previ o caso quando não existe nenhum grupo:
[
{
"name": "cust1",
"grp": null
}
]
nesse caso, a solução fornecida retorna erro:
$ jq -jr '.[]|"name:", " ",.name, "\n","groups:", (.grp[]|" ",.name),"\n"' test_json2
name: cust1
jq: error (at test_json2:6): Cannot iterate over null (null)
qualquer solução é apreciada.
Use o "juntar",
-j
E com um lugar reservado
Ou seja, dê
@tsv
dois arrays, um com o nome e outro com os grupos. Cada array se tornará sua própria linha.Caso o
grp
array esteja vazio e você gostaria de inserir um em seu-
lugar:A operação
x // y
retornax
a menos que sejax
avaliada paranull
oufalse
nesse caso ela retornay
.Isso também lidará com o caso em que
grp
está completamente ausente (não apenas uma matriz vazia).