CouchDB cURL Windows命令行无效的JSON

ski*_*joe 18 command-line json curl couchdb

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

curl -H "Content-Type: application/json" -X POST "http://127.0.0.1:5984/test" -d {"valid":"json"}
Run Code Online (Sandbox Code Playgroud)

它返回错误:

{"error":"bad_request","reason":"invalid_json"}
Run Code Online (Sandbox Code Playgroud)

JSON是有效的,所以给出了什么?

ski*_*joe 12

答案与命令行上JSON字符串的格式有关.即使你键入它是正确的JSON,它似乎必须在发送它之前重新格式化它.(也许其他人可以解释为什么它会更详细地解释它.)要解决这个问题,你需要逃避你的引用命令行如下:

curl -H "Content-Type: application/json" -X POST "http://127.0.0.1:5984/test" -d {"""valid""":"""json"""}
Run Code Online (Sandbox Code Playgroud)

看到额外的引号?这应该工作并返回带有id和版本号的"ok:true".

  • 实际上,当我从Windows命令行提示符使用curl时,单引号仍会抛出并且无效的json错误. (3认同)
  • 这是一种难看的方式.我这样做:-d {\"valid \":\"json \"}.更难以这种方式混淆...... (3认同)
  • 最简单的方法是使用单引号:`-d'{“ valid”:“ json”}'` (2认同)
  • 如果您在Windows计算机上本地运行,请将putty用于远程计算机或cygwin或gitbash.这是我的CouchDB备忘单http://macgyverdev.blogspot.se/2013/12/couchdb-on-linux-mint.html (2认同)
  • 如果您已经安装了 Git Bash,那么通过 Git Bash 运行curl 命令是最简单的方法,如果您正在阅读本文,您可能会这样做。 (2认同)

小智 5

您还必须引用整个声明以支持以下空格: -d "{\"title\":\"There is nothing Left to Lose\" , \"artist\":\"Foo Fighters\"}"