Ошибка о 'недопустимом JSON' с представлением couchDB, но штрафом json

Я пытаюсь установить следующее представление о 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 -X PUT -d keys.json  $CDB/_design/id
 {"error":"bad_request","reason":"invalid UTF-8 JSON"}

Я знаю, что это - весьма допустимый JSON, потому что я протестировал его с помощью 'json' библиотеки, встроенной в Python 2.6, это загружается прекрасный. Взлеты винта JS дают мне, ошибка 'должна оценить к функции'

Я проверил файл с передозировкой, нет никаких скрытых символов управления, моя система установлена на UTF-8. Я использую версию 0.10.1 CouchDB

Что еще могло бы быть неправильным с ним?

10
задан Chris Huang-Leaver 17 March 2010 в 11:50
поделиться

4 ответа

@titanoba намекнул на проблему:

Параметр -d для curl ожидает фактические данные в качестве аргумента!

Если вы хотите предоставить данные в файле, вам нужно добавить к нему префикс @ :

curl -X PUT -d @keys.json  $CDB/_design/id
19
ответ дан 3 December 2019 в 16:29
поделиться

Может потребоваться заключить JSON в одинарные кавычки:

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

у меня работает, но

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

вызывает указанную вами ошибку. Я предполагаю, что оболочка каким-то образом мешает отправляемым вами данным, когда вы опускаете одинарные кавычки.

править: я использую bash.

4
ответ дан 3 December 2019 в 16:29
поделиться

Вы недавно обновили CouchDB из исходного кода? Если это так, обязательно удалите все старые файлы.

2
ответ дан 3 December 2019 в 16:29
поделиться

Причина

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

не работает в том, что кавычки интерполируются оболочкой, которая использует одинарные кавычки.

0
ответ дан 3 December 2019 в 16:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: