Process large JSON stream with jq

前端 未结 2 841
生来不讨喜
生来不讨喜 2021-01-12 15:21

I get a very large JSON stream (several GB) from curl and try to process it with jq.

The relevant output I want to parse with jq

2条回答
  •  轮回少年
    2021-01-12 15:44

    (1) The vanilla filter you would use would be as follows:

    jq -r -c '.results[0].data[].row'
    

    (2) One way to use the streaming parser here would be to use it to process the output of .results[0].data, but the combination of the two steps will probably be slower than the vanilla approach.

    (3) To produce the output you want, you could run:

    jq -nc --stream '
      fromstream(inputs
        | select( [.[0][0,2,4]] == ["results", "data", "row"])
        | del(.[0][0:5]) )'
    

    (4) Alternatively, you may wish to try something along these lines:

    jq -nc --stream 'inputs
          | select(length==2)
          | select( [.[0][0,2,4]] == ["results", "data", "row"])
          | [ .[0][6], .[1]] '
    

    For the illustrative input, the output from the last invocation would be:

    ["key1","row1"] ["key2","row1"] ["key1","row2"] ["key2","row2"]

提交回复
热议问题