关于带有 couchDB 视图的“无效 JSON”的错误,但 json 很好
Posted
技术标签:
【中文标题】关于带有 couchDB 视图的“无效 JSON”的错误,但 json 很好【英文标题】:Error about 'invalid JSON' with couchDB view but the json's fine 【发布时间】:2010-03-17 11:30:47 【问题描述】:我正在尝试在 CouchDB 上设置以下视图
"_id":"_design/id",
"_rev":"1-9be2e55e05ac368da3047841f301203d",
"language":"javascript",
"views": "by_id":
"map" : "function(doc) emit(doc.id, doc)"
,"from_user_id":
"map" : "function(doc) if (doc.from_user_id) emit(doc.from_user_id, doc)",
"from_user":
"map" : "function(doc) if (doc.from_user) emit(doc.from_user, doc)",
"to_user_id":
"map" : "function(doc) if (doc.to_user_id) emit(doc.to_user_id, doc)",
"to_user":
"map" : "function(doc) if (doc.to_user) emit(doc.to_user, doc)" ,
"max_id":
"map" : "function(doc) if (doc.id) emit(doc._id, eval(doc.id))",
"reduce" :"function(key,value) a = value[0]; for (i=1; i <value.length; ++i)a = Math.max(a,value[i]) return a"
当我尝试使用 curl 'PUT' 时:
curl -X PUT -d keys.json $CDB/_design/id
"error":"bad_request","reason":"invalid UTF-8 JSON"
我知道它不是无效的 JSON,因为我使用 Python 2.6 中内置的“json”库对其进行了测试,它可以正常加载。 JS 搞砸了给我错误“必须评估一个函数”
我用 od 检查了文件,没有隐藏的控制字符,我的系统设置为 UTF-8。我正在使用 CouchDB 0.10.1 版
还有什么问题?
【问题讨论】:
keys.json 是否可以使用 UTF-16 或 UCS-2 等 16 位编码进行编码? 仅供参考,您的 JSON 在 Chrome、Internet Explorer 和 Firefox 中解析得很好。 @Joachim_Sauer 文件keys.json,显示为'ascii text',如果用'od -c'检查没有恐怖控制字符,我的系统默认为utf-8,我很困惑 curl -v 有帮助,因为它会转储发送到服务器的实际请求 【参考方案1】:@titanoba 暗示了这个问题:
-d
option of curl 期望实际数据作为参数!
如果要在文件中提供数据,则需要在其前面加上@
:
curl -X PUT -d @keys.json $CDB/_design/id
【讨论】:
我知道我只是忘记了。 拍脑袋 +1:那些不断给予和给予(并节省我时间)的答案之一。谢谢。【参考方案2】:可能需要将您的 JSON 放在单引号中:
curl -vX PUT http://localhost:5984/dbname/docid -d '"foo" : "bar"'
对我有用,但是
curl -vX PUT http://localhost:5984/dbname/docid -d "foo" : "bar"
抛出你提到的错误。我猜当你省略单引号时,shell 会以某种方式干扰你发送的数据。
编辑:我正在使用 bash。
【讨论】:
【参考方案3】:您最近是否从源代码更新了 CouchDB?如果是这样,请务必删除所有旧文件。
【讨论】:
【参考方案4】:原因
curl -vX PUT http://localhost:5984/dbname/docid -d "foo" : "bar"
行不通的是引号是由shell使用单引号对引号进行插值的。
【讨论】:
以上是关于关于带有 couchDB 视图的“无效 JSON”的错误,但 json 很好的主要内容,如果未能解决你的问题,请参考以下文章