Verarbeiten Sie einen großen JSON-Stream mit jq
Ich erhalte einen sehr großen JSON-Stream (mehrere GB) voncurl
und versuche es mit @ zu verarbeitjq
.
Die relevante Ausgabe, mit der ich analysieren möchtejq
wird in ein Dokument gepackt, das die Ergebnisstruktur darstellt:
{
"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": []
}
Ich möchte das @ extrahierrow
Daten mitjq
. Das ist einfach:
curl XYZ | jq -r -c '.results[0].data[0].row[]'
Ergebnis
{"key1": "row1", "key2": "row1"}
{"key1": "row2", "key2": "row2"}
Allerdings wartet dies immer biscurl
abgeschlossen
Ich habe mit dem @ gespie--stream
-Option, die dafür gemacht ist. Ich habe den folgenden Befehl ausprobiert, wartet aber auch, bis das vollständige Objekt von @ zurückgegeben wircurl
:
curl XYZ | jq -n --stream 'fromstream(1|truncate_stream(inputs)) | .[].data[].row[]'
Gibt es eine Möglichkeit, zum @ zu springedata
field und beginne mit dem Parsenrow
eins nach dem anderen, ohne auf das Schließen von Tags zu warten?