我有一系列数据要输入数据库。输入数据的用户界面不适合批量输入,所以我试图制定一个等效的命令行。当我在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)在pos X不支持[globbing]嵌套大括号
其中X是第一个“[”。
的字符位置如何设置包含数组的json对象?
答案 0 :(得分:127)
您的命令行应该在要在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
答案 1 :(得分:72)
虽然原帖有其他问题(即缺少" -d"),但错误信息更通用。
curl:(3)在pos X不支持[globbing]嵌套大括号
这是因为花括号{}和方括号[]是curl中特殊的通配符。 要关闭此通讯,请使用" -g "选项。
例如,如果没有" -g"以下Solr facet查询将失败。关闭curl globbing :
curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'
答案 2 :(得分:37)
应该提到的是Accept
标题告诉服务器我们接受的内容,而此上下文中的相关标题是Content-Type
通常建议在发送JSON时将Content-Type
指定为application/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`
答案 3 :(得分:1)
尝试使用单引号代替双引号和 -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命令错误: 错误的网址冒号是第一个字符