如何使用curl使用数组输出json对象

时间:2013-03-15 05:32:13

标签: json curl

我有一系列数据要输入数据库。输入数据的用户界面不适合批量输入,所以我试图制定一个等效的命令行。当我在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对象?

4 个答案:

答案 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命令错误: 错误的网址冒号是第一个字符