我想使用curl来放置数据。这有效:
curl -X PUT --data '{ "xy": [0.6476, 0.2727] }' "http://"
我想使用几个bash变量代替文字:
$key="xy"
$value="[0.6476, 0.2727]"
我尝试用带引号的vars替换文字,但出现错误“参数不可用”。我已经尝试过使用嵌套和转义引号的组合,但是我什么也没得到。
答案 0 :(得分:1)
这与Node
对我有用:
key="xy"
value="[0.6476, 0.2727]"
jsonData=$(node -e "console.log(JSON.stringify({$key: $value}))")
#jsonData output is: {"xy":[0.6476,0.2727]}
curl -X PUT --data $jsonData "http://"
但这仅适用于Node.js
开发人员,或者您已安装Node
环境。
答案 1 :(得分:0)
这对我有用:
$ key='foo'
$ value='[ bar, bar ]'
$ echo "{ \"$key\": $value }"
{ "foo": [ bar, bar ] }
所以这也应该对您有用:
curl -X PUT --data "{ \"$key\": $value }" "http://google.com.uy"
让我知道是否有帮助!
答案 2 :(得分:0)
使用jq
(1.6或更高版本),使用--jsonargs
选项将多个JSON编码的值作为可通过$ARGS.positional
访问的JSON数组:
$ key=xy
$ value=(0.6476 0.2727)
$ jq -n '{($k): $ARGS.positional}' --arg k "$key" --jsonargs "${value[@]}"
{
"xy": [
0.6476,
0.2727
]
}
--jsonargs
必须排在最后,以便将所有剩余的参数视为所需数组中的值。我们使用--jsonargs
而不是--args
,以便获得浮点值数组,而不是字符串数组。
一旦jq
工作,就将其输出通过管道传送到curl
,后者将-
作为--data
的参数,以从管道读取数据。
jq -n '{($k): $ARGS.positional}' --arg k "$key" --jsonargs "${value[@]}" |
curl -X PUT --data - "http://"