我有相当小的对象的巨大(~7GB)json数组.
是否有相对简单的方法来过滤这些对象而不将整个文件加载到内存中?
--stream选项看起来合适,但我无法弄清楚如何将[path,value]的流折叠到原始对象.
pea*_*eak 10
jq 1.5有一个流解析器.jq FAQ提供了一个如何将顶级JSON对象数组转换为其元素流的示例:
$ jq -nc --stream 'fromstream(1|truncate_stream(inputs))'
[{"foo":"bar"},{"foo":"baz"}]
{"foo":"bar"}
{"foo":"baz"}
Run Code Online (Sandbox Code Playgroud)
这可能足以满足您的需要,但值得注意的是setpath/2可能会有所帮助.以下是如何制作传单流:
jq -c --stream '. as $in | select(length == 2) | {}|setpath($in[0]; $in[1])'
Run Code Online (Sandbox Code Playgroud)
更多信息和文档可在jq手册中找到:https://stedolan.github.io/jq/manual/#Streaming