使用包含JSON数据的变量来卷曲PUT

时间:2019-12-04 19:38:33

标签: json bash curl

我想使用curl来放置数据。这有效:

curl -X PUT --data '{ "xy": [0.6476, 0.2727] }' "http://"

我想使用几个bash变量代替文字:

$key="xy"
$value="[0.6476, 0.2727]"

我尝试用带引号的vars替换文字,但出现错误“参数不可用”。我已经尝试过使用嵌套和转义引号的组合,但是我什么也没得到。

3 个答案:

答案 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://"