CouchDB cURL Windows 命令行无效的 JSON

20

在Windows命令行中使用cURL运行以下命令,尝试将新文档发布到现有的CouchDB数据库(名为test),但是失败:

curl -H "Content-Type: application/json" -X POST "http://127.0.0.1:5984/test" -d {"valid":"json"}

它返回错误:

{"error":"bad_request","reason":"invalid_json"}

JSON是有效的,那是怎么回事呢?

2个回答

18

答案与命令行中JSON字符串的格式有关。尽管在键入时它是正确的JSON,但命令行似乎必须在发送之前重新格式化它。(也许其他人可以更详细地解释为什么会这样。) 为解决此问题,您需要在命令行中转义引号,如下所示:

curl -H "Content-Type: application/json" -X POST "http://127.0.0.1:5984/test" -d {"""valid""":"""json"""}

看到多余的引号了吗?这样应该可以正常工作,并返回带有id和修订号的"ok:true"。


2
最简单的方法是使用单引号:-d '{"valid": "json"}' - Kim Stebel
5
实际上,当我从Windows命令行提示符中使用curl时,单引号仍会抛出无效的JSON错误。 - skinneejoe
3
如果你在Windows机器上本地运行,请使用Putty来连接远程机器,或使用Cygwin或GitBash。这是我的CouchDB速查表:http://macgyverdev.blogspot.se/2013/12/couchdb-on-linux-mint.html。 - Johan Norén
4
这种方法有点丑陋。我会这样做:-d {"valid":"json"}。用这种方式更难混淆…… - Lilian A. Moraru
2
通过 Git Bash 运行您的 curl 命令是最简单的方法,如果您已经安装了它,那么您可能正在阅读这篇文章。 - Josh1billion

5

你需要引用整个语句来支持像这样的空格:-d“{\"title\":\"There is Nothing Left to Lose\",\"artist\":\"Foo Fighters\"}”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接