如何从NDJSON文件中提取最后一个JSON对象?
解决NDJSON文件提取最后一个JSON对象的问题
问题原因
你之前的命令无效,是因为jq默认会逐行处理NDJSON的每个独立JSON对象:
[.][-1]是把单个JSON对象包装成数组后取最后一个元素,结果还是原对象,所以会输出所有行last(.)对单个JSON对象执行last操作,返回的就是对象本身,同样会输出全部内容
解决方案
有两种常用方式:
方式1:用jq的--slurp(简写-s)选项
这个选项会将整个NDJSON文件的所有JSON对象合并成一个数组,之后再取最后一个元素:
cat toto.json | jq -s 'last'
或者等价的:
cat toto.json | jq -s '.[-1]'
方式2:用tail先取最后一行(更高效,适合大文件)
因为NDJSON的每个对象占一行,直接取最后一行就是最后一个JSON对象,再用jq格式化:
tail -n 1 toto.json | jq .
内容的提问来源于stack exchange,提问作者SebMa
相关产品推荐
相关产品推荐

