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

我有一系列数据要输入数据库。输入数据的用户界面不适合大容量输入,所以我试图制定一个等效的命令行。当我在 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)[ globbing ]嵌套大括号在 pos X 不支持

Where X is the character position of first "[".

如何放入一个包含数组的 json 对象?

220590 次浏览

命令行应该在要发送到 PUT 中的字符串之前插入 - 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

注意: JSON 数据只包装为可读性,对于 curl请求无效。

应该提到的是,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`

尽管原来的帖子还有其他问题(比如缺少“-d”) ,但是错误消息更通用。

Curl: (3)[ globbing ]嵌套大括号在 pos X 不支持

This is because curly braces {} and square brackets [] are special globbing characters in curl. 要关闭这个 globbing,请使用“ -g”选项。

例如,如果没有 “-g”关闭卷球,以下 Solr 方面查询将失败: curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

唯一有帮助的是使用 JSON 文件而不是 JSON 正文文本

尝试使用 单引号代替 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 命令错误: 坏网址冒号是第一个字符