为何jq中简单的列表转JSON数组操作无法生效?
解决文本列表转JSON数组的jq用法问题
为什么之前的操作失败?
- 使用
-R选项时,jq会逐行处理输入,每一行文本都会被当作独立的字符串传入过滤表达式:[.]:对每一行单独生成一个单元素数组,所以输出多个独立数组,而非合并成一个整体数组。.[]:试图对单个字符串执行数组迭代操作,但字符串不属于可迭代的数组/对象类型,因此触发报错。
简洁的正确实现方式
如果你不想用inputs函数,最简洁的写法可以优化你找到的方法,或者用更紧凑的形式:
cat list | jq -sR '[split("\n")[] | select(length > 0)]'
或者省略cat直接让jq读取文件(更符合命令行简洁原则):
jq -sR 'split("\n") | map(select(length>0))' list
参数说明:
-s(--slurp):把所有输入行合并成一个单一字符串(行之间保留换行符),替代默认的逐行处理逻辑。split("\n"):将合并后的字符串按换行符分割为数组,此时可能包含空字符串(若文件末尾存在换行)。map(select(length>0)):过滤掉数组中的空字符串,得到仅包含有效内容的JSON数组。
最终输出效果
执行后会生成你期望的格式:
[ "me", "you", "them" ]
内容的提问来源于stack exchange,提问作者Nelson Teixeira
相关产品推荐
相关产品推荐

