如何使用jq将Bash数组转换为指定结构的对象数组
问题原因
echo "${IDS[@]}"会将数组所有元素拼接为单个空格分隔的字符串传入jq,导致jq读取到的输入是一整行包含两个ID的内容,最终只会生成一个对象。
解决方法
方案1:逐行输出数组元素处理
通过printf将每个ID单独输出为一行,配合jq的inputs语法逐行处理后合并为数组:
IDS=("baf3eca8-c4bd-4590-bf1f-9b1515d521ba" "ef2fa922-2038-445c-9d32-8c1f23511fe4") printf "%s\n" "${IDS[@]}" | jq -nR '[inputs | {id: ., names: ["bob", "sally"]}]'
方案2:直接传递数组参数(更简洁)
通过--args将Bash数组直接作为jq的位置参数传入,无需处理输入流换行:
IDS=("baf3eca8-c4bd-4590-bf1f-9b1515d521ba" "ef2fa922-2038-445c-9d32-8c1f23511fe4") jq -n '$ARGS.positional | map({id: ., names: ["bob", "sally"]})' --args "${IDS[@]}"
两种方案都可以得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Jghorton14
相关产品推荐
相关产品推荐

