【问题标题】:Curl giving "Invalid UTF-8 JSON" error from CouchDb although JSON is fine? Any ideas?尽管 JSON 很好,但 Curl 从 CouchDb 给出“无效的 UTF-8 JSON”错误?有任何想法吗?
【发布时间】:2011-03-21 20:24:35
【问题描述】:

这与题为“错误关于'invalid JSON' with couchDB view but the json's fine”的问题略有不同:我不是要上传文件,只是输入一个简单的文档。

我尝试使用的示例实际上来自 O'Reilly 的书“CouchDB:权威指南”,我很确定我之前已经尝试过它并让它发挥作用。这是命令:

curl -X PUT http://username:password@127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af -d '{"title":"There is Nothing Left to Lose","artist":"Foo Fighters"}'

数据库相册存在且用户名和密码正确。我已经用 JSONLint 检查了这个并且 JSON 是有效的,我很茫然......大概是 CouchDB 服务器本身存在问题,但它似乎运行正确......有什么想法吗?这让我发疯了!

谢谢

【问题讨论】:

  • 响应头在说什么?
  • 你升级你的couchdb了吗?从 0.10 升级到 1.0 后,我遇到了这个问题。如果你运行测试套件会发生什么?

标签: json curl couchdb


【解决方案1】:

谢谢各位。原来这是引号转义的问题。这是我在 CouchDB 用户邮件列表上从 David 那里得到的答案:

这是关于 Windows 的事情 引用 - 一个真正的 PITA。很遗憾 Windows 上的 cmd.exe shell 无法解析 这正确。什么时候的规则 用 "" 或 ^" 或 \" 转义是 有点含糊,但这有效:

C:\tmp>curl -X PUT http://username:password@127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af -d "{\"title\":\"没有什么可以失去的\",\"artist\":\"Foo 战士\"}" {"ok":true,"id":"6e1295ed6c29495e54cc05947f18c8af","re​​v":"1-4b39c2971c9ad54cb37e08fa02fec636"}

C:\tmp>

"基本上你需要\"escape\" all JSON 中的“引号”

这解决了我的问题

【讨论】:

  • 没有别的办法了吗?我的意思是,转义引号看起来像一个 PITA。
  • 这是 shell 的限制。另一种方法是将 JSON 放入文件中,并使用 -d @filename
  • @Das:我通过安装 Git 解决了这个问题。它包括带有 curl 的 Git Bash。
  • @null 是的,这是另一种方式......另一种更好方式。特别是因为我们中的许多人已经安装了 git。加上 bash 比 cmd 有更好的配色方案)
【解决方案2】:

我也遇到了同样的问题,经过一段时间的搜索,我在其他问题中找到了Git Bash。 Git bash 里面有 curl 命令。 git bash 包含在 Git 安装程序中。

【讨论】:

    【解决方案3】:

    您必须将转义字符 ** 放在 -d 之后所有的东西都放在 **"" 中。 即: curl -X PUT http://127.0.0.1:5984/my_database/"001" -d "{\"Name\":\"Suresh\",\"age\":\"32\",\"Designation\":\ "联营经理\"}"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多