2013-03-15 124 views
64

我有一系列要输入数据库的数据。输入数据的用户界面不适合批量输入,所以我试图制定一个等效的命令行。当我使用chrome检查UI的网络请求时,我看到一个json对象的PUT请求。当我试图复制请求如何使用curl将一个json对象与一个数组放在一起

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` 

我得到一个错误

卷曲:(3)[通配符]嵌套在pos不支持括号X

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

我该如何PUT一个包含数组的json对象?

回答

97

你的命令行应该有一个-d/--data插入你想在PUT中发送的字符串之前,并且你想设置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 
+3

-1因为Content-Type(而不是Accept)是在这种情况下应该设置的标题。 – Goran 2013-07-11 13:23:23

+0

对于那些想知道的人来说,[JSON]只是JSON字符串的占位符。不要在JSON字符串周围添加额外的方括号。 – 2015-08-06 17:04:42

+1

shoiuld在示例中使用真正的JSON – bluefloyd8 2015-08-06 22:00:12

33

应当提及的是,Accept头告诉服务器一些关于我们正在接受背部,而在这种情况下的相关头文件是Content-Type

发送JSON时,通常建议将Content-Type指定为application/json。对于卷曲的语法是:

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

虽然原来的职位有其他问题(即失踪“-d”),该错误信息是更通用的。

卷曲:(3)未在pos X

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

作为一个例子,下面Solr的面查询将失败而不“-g”关闭卷曲通配符 curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

+0

这对我来说是正确的解决方案,使用'-g'按预期工作。谢谢@Yonik – arjones 2017-06-30 02:47:00

+0

我的天啊,我一直在寻找解决我的GraphQL curl问题的方法,这对我有所帮助。很棒的酱。 – 2018-01-31 01:43:55

相关问题