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

Passing JSON arguments (not simple strings) to 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

对您的工作代码进行简单转换(根据不保留给 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
}')