如何使用jq将多个inlineCard的url拼接为单个逗号分隔字符串
错误原因
你现有命令的报错是因为join(",")的调用位置错误。你当前的写法是对每个筛选得到的单个url字符串调用join方法,但join仅支持对数组做拼接操作,因此触发了无法遍历字符串的报错。
解决方法
你需要先将所有符合条件的url收集为一个数组,再对整个数组执行拼接操作,对应命令如下:
echo "$MY_JSON" | jq '[.content[].content[] | select(.type == "inlineCard") | .attrs.url] | join(", ")'
执行上述命令就能直接得到你期望的带双引号的拼接结果。如果你需要输出不带外层双引号的纯字符串,可以给jq添加-r参数:
echo "$MY_JSON" | jq -r '[.content[].content[] | select(.type == "inlineCard") | .attrs.url] | join(", ")'
注:如果确定type的值完全等于inlineCard,用==匹配比contains更稳妥,避免匹配到type值包含该子串的其他无关节点。
内容的提问来源于stack exchange,提问作者Peter Meier
相关产品推荐
相关产品推荐

