Processar fluxo JSON grande com jq
Eu recebo um fluxo JSON muito grande (vários GB) decurl
e tente processá-lo comjq
.
A saída relevante com a qual quero analisarjq
é empacotado em um documento que representa a estrutura de resultados:
{
"results":[
{
"columns": ["n"],
// get this
"data": [
{"row": [{"key1": "row1", "key2": "row1"}], "meta": [{"key": "value"}]},
{"row": [{"key1": "row2", "key2": "row2"}], "meta": [{"key": "value"}]}
// ... millions of rows
]
}
],
"errors": []
}
Eu quero extrair orow
dados comjq
. Isto é simples:
curl XYZ | jq -r -c '.results[0].data[0].row[]'
Resultado:
{"key1": "row1", "key2": "row1"}
{"key1": "row2", "key2": "row2"}
No entanto, isso sempre espera atécurl
está completo.
Eu brinquei com o--stream
opção que é feita para lidar com isso. Eu tentei o seguinte comando, mas também aguarda até que o objeto completo seja retornado decurl
:
curl XYZ | jq -n --stream 'fromstream(1|truncate_stream(inputs)) | .[].data[].row[]'
Existe uma maneira de 'pular' para odata
campo e comece a analisarrow
um por um sem esperar pelo fechamento das tags?