Eu tenho um arquivo que se parece com isso:
[
{
"billingAccountNumber": "x",
"paymentResponseObject": {
"uiErrorDipslayMessage": "",
"transactionStatus": "S",
"transactionDescription": "",
"transactionCode": "",
"confirmationNumber": "1"
}
},
{
"billingAccountNumber": "y",
"paymentResponseObject": {
"uiErrorDipslayMessage": "",
"transactionStatus": "S",
"transactionDescription": "",
"transactionCode": "",
"confirmationNumber": "2"
}
},
{
"billingAccountNumber": "z",
"paymentResponseObject": {
"uiErrorDipslayMessage": "",
"transactionStatus": "S",
"transactionDescription": "",
"transactionCode": "",
"confirmationNumber": "3"
}
}
]
Os dados não são exatamente assim, e eu tenho mais de três elementos. A partir desses dados, quero criar três arquivos: x.json
, y.json
, e z.json
. Eu quero que o conteúdo de cada um desses arquivos seja o conteúdo do arquivo paymentResponseObject
.
Existe uma maneira de fazer isso com jq
? Eu descobri como fazer isso em awk
, mas é muito desajeitado e quero repetir esse processo com esquemas diferentes. Eu tenho que reescrever 80% do awk
script para cada esquema.
A partir deste tópico SO:
Experimente com este código para salvar cada elemento com nomes
0.json
e . Para sua informação, pode funcionar para qualquer número de itens JSON em uma matriz.1.json
2.json
Explicação:
a linha abaixo encontra o comprimento da matriz para nomear os objetos:
Como o array começa com 0, vamos corrigir o nome do arquivo de saída
abaixo das linhas busca um elemento do documento json e salva no arquivo
para salvar literalmente em
x.json
,y.json
ez.json
:Faça
jq
criar um script de shell para você:Isso pega cada elemento de matriz de nível superior em seu documento JSON e cria um redirecionamento de documento aqui do shell para cada um. Cada redirecionamento para
cat
é citado para evitar que o shell expanda coisas no documento. A saída vai para o arquivo nomeado pelo.billingAccountNumber
valor, citado pelo@sh
formatador emjq
.Dados os dados na pergunta, isso cria o script
Isso pode ser executado
sh
para criar os três arquivosx.json
,y.json
ez.json
usando os três documentos incorporados e citados aqui.Executar isso seria uma questão de canalizá-lo
sh -s
diretamente dojq
.