传递JSON字符串作为aws命令的输入

时间:2018-04-02 07:01:29

标签: json linux shell

我正在尝试从数据管道中调用API,我遇到了以下错误。 这就是我想要的。

aws apigateway test-invoke-method --rest-api-id  int836id123 --resource-id  1ukckkkwq1 --http-method POST --body "{\"QUEUEURL\": \"\",
\"BUCKETREGION\": \"us-east-1\",
\"FLAGFILE\": \"\",
\"FTPUSERID\": \"abcd-test-parameter\",
\"FTPPATH\": \"/abcd/Incr1\", 
\"FTPPASSWORD\": \"abcd-test-parameter\", 
\"PARAMETERSTOREREGION\":\"us-east-1\",
\"ISFTP2S3\": \"false\", 
\"FTPSERVER\": \"11.42.123.111\", 
\"BUCKETNAME\": \"path/Lineite/MAIN\", 
\"QUEUEREGION\": \"\",
\"LOCALPATH\": \"path\"}"

我已经确认命令中没有额外的输入空间。 此外,我试图在没有\的情况下运行,但同样的错误。

这是我得到的错误

  

2018:Lambda调用失败,状态:400 \ nMon Apr 02 06:45:20   UTC 2018:执行失败:无法将请求主体解析为json:   意外的角色(' Q'(代码81)):期待双引号   开始字段名称\ n在[来源:[B @ 72073757; line:1,column:3] \ nMon   4月02日06:45:20 UTC 2018:方法已完成,状态:400 \ n",       "延迟":41,       "标题":{}}

当我尝试从AWS cli运行时,它可以工作但不能从数据管道中运行。

1 个答案:

答案 0 :(得分:1)

您可以使用here-document定义格式正确的JSON,这样您就不必担心转义引号。将函数定义为

jsonDump()
{
  cat <<EOF
{
   "QUEUEURL":"",
   "BUCKETREGION":"us-east-1",
   "FLAGFILE":"",
   "FTPUSERID":"abcd-test-parameter",
   "FTPPATH":"/abcd/Incr1",
   "FTPPASSWORD":"abcd-test-parameter",
   "PARAMETERSTOREREGION":"us-east-1",
   "ISFTP2S3":"false",
   "FTPSERVER":"11.42.123.111",
   "BUCKETNAME":"path/Lineite/MAIN",
   "QUEUEREGION":"",
   "LOCALPATH":"path"
}
EOF
}

现在调用下面的函数

aws apigateway test-invoke-method --rest-api-id  int836id123 --resource-id  1ukckkkwq1 --http-method POST --body "$(jsonDump)"