如何将3个jq过滤器合并为单命令解析Google诗歌生成接口返回的JSON
合并jq命令实现方案
1. 取第一条带text字段的诗歌内容
直接将三次过滤逻辑合并到单个jq过滤器中,无需多次管道调用jq进程,命令如下:
echo "$verses" | jq -r '.verse | map(select(.text)) | first.text'
逻辑说明:
- 第一步提取返回结果中的
verse数组 - 用
map(select(.text))过滤出所有包含text字段的有效元素 - 用
first取过滤后数组的第一个元素,直接提取text字段的值 -r参数直接输出原始文本,无需额外转义处理
2. 随机选取一条带text字段的诗歌内容
利用jq内置的random函数生成随机索引,实现随机选取,同时兼容空数组的异常场景,命令如下:
echo "$verses" | jq -r '.verse | map(select(.text)) | if length > 0 then .[length * random | floor].text else empty end'
逻辑说明:
- 前两步和取第一条的逻辑一致,先筛选出所有带
text字段的有效元素 - 先判断筛选后的数组长度是否大于0,避免空数组取值报错
- 用
length * random | floor生成合法的随机数组索引,取对应元素的text字段
内容的提问来源于stack exchange,提问作者Fohroer
相关产品推荐
相关产品推荐

