[
{
"key": "@timestamp",
"value": "2024-08-21 03:02:57.871"
},
{
"key": "@message",
"value": "Aug 21, 2024 1:00:11 PM AEST INFO [com.boomi.util.LogUtil doLog] Node is using valid java"
},
{
"key": "@timestamp",
"value": "2024-08-21 03:02:42.332"
},
{
"key": "@message",
"value": "Aug 21 13:02:37 ip-10-250-122-60 auditd[3013]: Audit daemon rotating log files"
}
]
Como posso transformar o JSON em um abaixo usando jq
[
{
"@timestamp": "2024-08-21 03:02:57.871",
"@message": "Aug 21, 2024 1:00:11 PM AEST INFO [com.boomi.util.LogUtil doLog] Node is using valid java"
},
{
"@timestamp": "2024-08-21 03:02:42.332",
"@message": "Aug 21 13:02:37 ip-10-250-122-60 auditd[3013]: Audit daemon rotating log files"
}
]
Usando apenas funções documentadas em
jq
, você pode primeiro emparelhar as entradas em seu array assim:Em seguida, mapeie
from_entries
para cada uma das entradas do novo array:Uma abordagem alternativa, que não lida com a indexação do array original de uma maneira especial, é agrupar as entradas do array pela chave para separar as entradas
@message
e@timestamp
umas das outras. Você pode entãotranspose
agrupar o array resultante e mapearfrom_entries
como antes:Isso depende de
group_by()
não alterar a ordem entre entradas com a mesma chave (testes sugerem quejq
ele emprega um algoritmo de classificação estável, então isso deve ser aceitável).A entrada está quase no formato requerido para
from_entries
, que espera que a entrada seja arrays de objetos com camposkey
evalue
. Precisamos apenas agrupá-los, e esta postagem do Stack Overflow nos leva ao builtin não documentado_nwise
. Então, precisamos apenas de:Observe que a postagem vinculada (e outras respostas lá) têm versões melhoradas
_nwise
, que você pode querer dar uma olhada.