如何使用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 globbing : curl -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将文件内容作为主体发送