首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试执行curl POST命令时出现“JSON输入的意外结束”错误

尝试执行curl POST命令时出现“JSON输入的意外结束”错误
EN

Stack Overflow用户
提问于 2020-03-20 17:20:22
回答 1查看 1.7K关注 0票数 1

我在用curl -X POST命令发送适当的json数据时遇到了问题。我已经通过复制和粘贴硬编码的值在mac上本地运行POST命令,但是我现在正在尝试创建一个.sh脚本来自动化这个过程。在运行下面的代码时,我会得到以下错误:

{“消息”:“JSON输入的意外结束”}

以下是来自JSON_STRING的输出json,其名称为泛型,其他任何内容都没有更改:

{ "url": "api_url", "tileset": "username.filename" }

一旦我能够找到如何在POST命令中正确地格式化json,我知道它会工作,但我似乎无法正确地理解语法。希望一双全新的/体验的眼睛能捕捉到我的错误:)另外,我拥有的所有变量都是正确的,并且已经通过在mac终端中运行变量值来确认。提前感谢您的帮助!

代码语言:javascript
复制
    curl_url="http://${bucket}.s3.amazonaws.com/${key}"
    echo $curl_url

    tileset_id="username.filename"

    JSON_STRING=$(jq -n \
                  --arg bn "$curl_url" \
                  --arg on "$tileset_id" \
                  '{url: $bn, tileset: $on}')

    echo $JSON_STRING

    curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d $JSON_STRING 'apiurl'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-20 18:07:07

绝对需要引用shell变量:

代码语言:javascript
复制
curl ... -d "$JSON_STRING" http://example.com/end/point

否则,shell将执行分词操作,而-d的参数将变为{"url":

另外,bash数组可以帮助提高可读性:

代码语言:javascript
复制
curl_url="http://${bucket}.s3.amazonaws.com/${key}"
tileset_id="username.filename"

JSON_STRING=$(
    jq -n \
          --arg bn "$curl_url" \
          --arg on "$tileset_id" \
          '{url: $bn, tileset: $on}'
)

curl_opts=(
    -X POST
    -H "Content-Type: application/json" 
    -H "Cache-Control: no-cache" 
    -d "$JSON_STRING"
)

curl "${curl_opts[@]}" 'apiurl'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60778756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档