Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于'的错误;无效的JSON';使用couchDB视图,但使用json';很好_Javascript_Views_Couchdb - Fatal编程技术网

Javascript 关于'的错误;无效的JSON';使用couchDB视图,但使用json';很好

Javascript 关于'的错误;无效的JSON';使用couchDB视图,但使用json';很好,javascript,views,couchdb,Javascript,Views,Couchdb,我正在尝试在CouchDB上设置以下视图 { "_id":"_design/id", "_rev":"1-9be2e55e05ac368da3047841f301203d", "language":"javascript", "views":{ "by_id":{ "map" : "function(doc) { emit(doc.id, doc)}" },"from_user_id":{ "map" : "functi

我正在尝试在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}"
        }
    }
}
我知道它不是无效的JSON,因为我使用Python2.6中内置的“JSON”库对它进行了测试,它可以正常加载。JS出错给我错误“必须对函数求值”

我已经用od检查了文件,没有隐藏的控制字符,我的系统设置为UTF-8。我使用的是CouchDB版本0.10.1


还有什么问题吗?

可能需要将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。

@titanoba暗示了这个问题:

期望实际数据作为参数

如果要在文件中提供数据,需要在其前面加上
@

curl -X PUT -d @keys.json  $CDB/_design/id

您最近是否从源代码更新了CouchDB?如果是这样,请确保删除所有旧文件。

原因

curl -vX PUT http://localhost:5984/dbname/docid -d {"foo" : "bar"}

不起作用的是,shell使用单引号对引号进行插值,从而使引号转义。

keys.json是否可能采用16位编码,如UTF-16或UCS-2?仅供参考,您的json在Chrome、Internet Explorer和Firefox中解析得很好。@Joachim_Sauer file keys.json将其显示为“ascii文本”,如果使用'od-c'检查,则没有恐怖控制字符,我的系统默认为utf-8,我很困惑curl-v有帮助,因为它会转储发送到服务器的实际请求。我知道这一点,但我忘记了。一记耳光+1:这是一个不断给予和给予(并为我节省时间)的答案。谢谢。
curl -vX PUT http://localhost:5984/dbname/docid -d {"foo" : "bar"}