如何将bash变量传入jq --arg
参数?
我可以开始工作的是:
FINAL_JSON= #some JSON
PAYLOAD=$(echo $FINAL_JSON | jq ' {
"attachments": .
} ')
困扰我的是echo $FINAL_JSON
事。我应该能够在jq
??
PAYLOAD=$(jq -n --arg attach "$FINAL_JSON" '{
"attachments":$attach
}')
但所有这一切都是以字符串形式传递JSON。 "
周围没有引号$FINAL_JSON
我收到此错误:
error: syntax error, unexpected $end
{1 compile error
答案 0 :(得分:2)
对工作代码进行简单转换(根据惯例,转换为小写变量名,不保留用于shell或系统使用的变量名):
payload=$(jq -n --argfile attach <(printf '%s\n' "$final_json") '{
"attachments":$attach
}')
我坚持使用--argfile
,因为它将文件的内容解析为JSON;使用--arg
不会产生这种效果。
<(...)
语法是进程替换,替换为连接到相关内容的命名管道或临时文件的文件名。
但是,您也可以使用--arg
,并应用fromjson
过滤器解析为JSON:
payload=$(jq -n --arg attach "$final_json" '{
"attachments":$attach|fromjson
}')