将 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
}')
如何将 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
}')