如何使用curl将一个json对象与一个数组放在一起

我有一系列的数据进入数据库。 input数据的用户界面不适合批量input,所以我试图制定一个相当的命令行。 当我在chrome中检查UI的networking请求时,我看到一个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对象?

你的命令行应该在你想要在PUT中发送的string之前插入-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 

虽然原来的post还有其他的问题(即缺less“-d”),但是错误信息更为通用。

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

这是因为大括号{}和方括号[]是curl中特殊的通配符。 要closures这个通配符,使用“ -g ”选项。

例如,下面的Solr构面查询将会失败,如果没有“-g”closurescurl globbingcurl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

应该提到的是, Accept头告诉服务器一些我们正在接受的东西,而在这个上下文中的相关头是Content-Type

发送JSON时,通常build议将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` 

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