jq流式模式丢失首个元素:如何避免该问题?
解决jq 1.6流式模式首个数组元素id字段丢失问题
修正后的命令
将原命令中的inputs替换为input, inputs,即可正确保留首元素的id字段:
echo [{"id":482,"a":"2","b":1},{"id":483,"a":"3","b":2}] | jq -c --stream "fromstream(1|truncate_stream(input, inputs))"
执行后输出:
{"id":482,"a":"2","b":1}
{"id":483,"a":"3","b":2}
问题根源
jq 1.6中inputs函数的特性是跳过管道中的第一个输入值。在流式模式下,原命令的inputs会漏掉首个数组元素id对应的流式路径项(即[[0,"id"],482]),导致fromstream无法还原该字段。而input, inputs会包含所有流式输入项,包括第一个关键的id路径数据,从而完整还原每个对象的所有字段。
超大文件适配方案
针对100GB级别的大文件,直接将上述命令应用到文件输入即可,流式处理的性能不受影响:
jq -c --stream "fromstream(1|truncate_stream(input, inputs))" large_file.json
内容的提问来源于stack exchange,提问作者Niels Jespersen
相关产品推荐
相关产品推荐

