2010-03-17 4 views
9

Ich versuche, die folgende Ansicht auf CouchDB SetupFehler zu 'ungültiger JSON' mit CouchDB Ansicht aber die json ist in Ordnung

{ 
"_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}" 
     } 
    } 
} 

, wenn ich versuche zu 'PUT' dieser mit curl:

curl -X PUT -d keys.json $CDB/_design/id 
{"error":"bad_request","reason":"invalid UTF-8 JSON"} 

Ich weiß, es ist nicht ungültig JSON, weil ich es mit der 'Json' Bibliothek in Python 2.6 eingebaut getestet hat, lädt es gut. JS Schrauben ups geben mir den Fehler 'muss eine Funktion zu bewerten'

Ich habe die Datei mit od überprüft, es gibt keine versteckten Steuerzeichen, mein System ist auf UTF-8 eingestellt. Ich benutze CouchDB Version 0.10.1

Was sonst könnte daran falsch sein?

+0

Ist es möglich, dass keys.json in einer 16-Bit-Codierung wie UTF-16 oder UCS-2 codiert ist? –

+0

Als Erstes analysiert Ihr JSON in Chrome, Internet Explorer und Firefox. –

+0

@Joachim_Sauer Datei keys.json, zeigt es als 'ASCII-Text', Wenn mit 'od -c' überprüft gibt es keine Horror Control Chars, mein System standardmäßig UTF-8, ich bin verwirrt –

Antwort

18

@titanoba auf das Problem hingewiesen:

Die -d option of curl die aktuellen Daten als Argument erwartet!

Wenn Sie die Daten in einer Datei zur Verfügung stellen möchten, müssen Sie es mit @ Präfix: vor kurzem

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

Ich wusste, dass ich gerade vergessen habe. * Slaps Kopf * –

+0

Danke für die Hilfe –

+0

+1: Eine dieser Antworten, die geben und geben (und spart mir Zeit.) Danke. –

4

Es könnte notwendig sein, um Ihre JSON in einfache Anführungszeichen zu setzen:

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

Werke für mich, aber

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

führt den Fehler, den Sie erwähnen. Ich schätze, die Shell stört irgendwie die Daten, die Sie senden, wenn Sie die einfachen Anführungszeichen weglassen.

edit: Ich benutze bash.

2

Haben Sie CouchDB aktualisieren von der Quelle? In diesem Fall sollten Sie alle alten Dateien entfernen.

0

Der Grund

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

Hat nicht funktioniert, dass die Zitate durch die Shell interpoliert werden die Zitate die einfachen Anführungszeichen entkommt mit.