如何使用curl将具有数组的json对象放入


94

我有一系列数据要输入数据库。输入数据的用户界面不适用于批量输入,因此我尝试制定等效的命令行。当我检查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)位置X不支持[globbing]嵌套的括号

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

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

Answers:


147

您的命令行应该在要发送到PUT中的字符串之前插入-d /-数据,并且您要设置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

4
-1是因为Content-Type(而不是Accept)是在这种情况下应设置的标头。
Goran 2013年

3
对于那些想知道的人,[JSON]只是JSON字符串的占位符。不要在JSON字符串周围添加额外的方括号。
Mihai Todor 2015年

89

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

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

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

例如,以下Solr facet查询将在没有“ -g”关闭curl globlob的情况下失败: curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'


3
-g按预期使用对我来说是正确的解决方案。感谢@Yonik
arjones

2
天哪,我一直在寻找解决GraphQL卷曲问题的方法,这对我有所帮助。很棒的酱。
NetOperator Wibby

39

应该提到的是,Accept标头告诉服务器有关我们正在接受的内容,而与此相关的标头是Content-Type

通常建议在发送JSON时指定Content-Typeapplication/json。对于curl,语法为:

-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`

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命令错误:URL冒号是第一个字符


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.