如何移除嵌套数组中每个子数组的最后一个对象并生成新数组
解决方案
你可以直接通过遍历外层子数组做切片的方式实现需求,正确的jq命令如下:
jq 'map(.[0:-1])' 你的输入文件路径
写法说明
map()用来遍历外层数组的每一个子元素(也就是你需要处理的每个子数组).[0:-1]是jq的原生数组切片语法,含义是取从下标0开始、到倒数第一个元素之前的所有内容,正好实现移除每个子数组最后一个元素的效果
之前写法不生效的原因
你尝试的... |= .[:-1]用了递归下降运算符...,会匹配所有层级的可遍历结构,不符合你只需要处理外层直接子数组的需求;to_entries相关写法属于多余操作,处理数组切片不需要先转成键值对结构。
如果需要兼容可能为空的子数组,可以用更稳妥的写法:
jq 'map(if length > 0 then .[:-1] else . end)' 你的输入文件路径
内容的提问来源于stack exchange,提问作者hun22kp
相关产品推荐
相关产品推荐

