我從curl
得到一個非常大的JSON流(幾GB),並嘗試用jq
來處理它。用jq處理大型JSON流
相關輸出我想與jq
解析填充表示結果結構文檔中:
{
"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": []
}
我想與jq
提取row
數據。這是簡單的:
curl XYZ | jq -r -c '.results[0].data[0].row[]'
結果:
{"key1": "row1", "key2": "row1"}
{"key1": "row2", "key2": "row2"}
然而,這總是等待curl
完成。
我玩--stream
選項,這是用來處理這個。我想下面的命令,但也一直等待,直到完整的對象從curl
返回:
curl XYZ | jq -n --stream 'fromstream(1|truncate_stream(inputs)) | .[].data[].row[]'
有沒有一種方法來「跳」到data
領域,並開始解析row
一個接一個,而不必等待關閉標籤?
這不僅是速度。沒有流內存使用爆炸和curl/jq崩潰。 –
謝謝,你的更新確實幫了很大忙。我並沒有真正到達那裏,因爲所有的行都被組合在輸出中。我還沒有想出如何收集各行的所有鍵/值對。我更新了問題中的數據描述。 –
我所要做的就是將'。[0] [3]'等於一個對象的所有數組。 –