将JSON参数(不是简单的字符串)传递给jq

时间:2015-06-02 14:57:22

标签: bash jq

如何将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

1 个答案:

答案 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
}')