110

我有一系列数据要输入数据库。输入数据的用户界面不适合批量输入,所以我正在尝试制定一个等效的命令行。当我在 chrome 中检查 UI 的网络请求时,我看到了一个 json 对象的 PUT 请求。当我尝试复制请求时

curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

我收到一个错误

curl: (3) [globbing] 位置 X 不支持嵌套大括号

其中 X 是第一个“[”的字符位置。

如何放置包含数组的 json 对象?

4

5 回答 5

164

您的命令行应该在要在 PUT 中发送的字符串之前插入-d/--data,并且您要设置 Content-Type 而不是 Accept。

curl -H 'Content-Type: application/json' -X PUT -d '[JSON]' \
     http://example.com/service

使用问题中的确切 JSON 数据,完整的命令行将变为:

curl -H 'Content-Type: application/json' -X PUT \
    -d '{"tags":["tag1","tag2"],
         "question":"Which band?",
         "answers":[{"id":"a0","answer":"Answer1"},
                    {"id":"a1","answer":"answer2"}]}' \
    http://example.com/service

curl注意:JSON 数据仅用于可读性包装,对请求无效。

于 2013-03-15T14:02:41.470 回答
101

尽管原始帖子有其他问题(即缺少“-d”),但错误消息更为通用。

curl: (3) [globbing] 位置 X 不支持嵌套大括号

这是因为花括号 {} 和方括号 [] 是 curl 中的特殊通配符。要关闭此通配符,请使用“ -g ”选项。

例如,如果没有“-g”来关闭 curl globbing ,以下 Solr 方面查询将失败: curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

于 2014-10-16T14:43:22.630 回答
39

应该提到的是,Accept标头告诉服务器我们正在接受什么,而在这种情况下相关的标头是Content-Type

通常建议在发送 JSON 时指定Content-Type为。application/jsoncurl 的语法是:

-H 'Content-Type: application/json'

所以完整的 curl 命令将是:

curl -H 'Content-Type: application/json' -H 'Accept: application/json' -X PUT -d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`
于 2013-05-22T13:10:13.570 回答
3

唯一有帮助的是使用 JSON 文件而不是 json 正文文本。基于如何使用 cURL 将文件内容作为正文实体发送

于 2015-09-20T15:46:32.637 回答
2

尝试使用单引号而不是双引号以及-g

以下场景对我有用

curl -g -d '{"collection":[{"NumberOfParcels":1,"Weight":1,"Length":1,"Width":1,"Height":1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

curl -g -d "{'collection':[{'NumberOfParcels':1,'Weight':1,'Length':1,'Width':1,'Height':1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

这特别解决了我的错误 curl 命令错误:bad url Colon is first character

于 2019-06-17T08:47:22.350 回答