2010-03-17 11 views
9

Próbuję skonfigurować następujący pogląd na CouchDBbłąd o 'nieprawidłowej JSON' z widokiem couchdb ale json w porządku

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

gdy próbuję 'wprowadzony' to za pomocą curl:

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

Wiem, że to nie jest nieprawidłowy JSON, ponieważ przetestowałem go przy użyciu biblioteki json wbudowanej w Pythonie 2.6, ładuje się dobrze. Wkręty JS dają mi błąd "musi ocenić do funkcji"

Sprawdziłem plik z od, nie ma ukrytych znaków kontrolnych, mój system jest ustawiony na UTF-8. Używam wersji CouchDB 0.10.1

Co jeszcze może być nie tak z tym?

+0

Czy jest możliwe, że keys.json jest zakodowany w 16-bitowym kodowaniu, takim jak UTF-16 lub UCS-2? –

+0

Jako FYI, Twój JSON parsuje dobrze w Chrome, Internet Explorer i Firefox. –

+0

@Joachim_Sauer plik keys.json, pokazuje go jako "tekst ascii", jeśli zaznaczony z "od -c" nie ma znaków kontrolnych horroru, mój system domyślnie przyjmuje utf-8, jestem zdziwiony –

Odpowiedz

18

@titanoba wskazywały na problem:

-d option of curl oczekuje, że rzeczywiste dane jako argument!

Jeśli chcesz podać dane w pliku, należy poprzedzić je @:

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

Wiedziałem, że po prostu zapomniałem. * uderzenie głową * –

+0

Dzięki za pomoc –

+0

+1: Jedna z odpowiedzi, która daje dawanie i dawanie (i oszczędzanie mi czasu.) Dzięki. –

4

To może być konieczne, aby umieścić swój JSON w apostrofach:

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

prace dla mnie, ale

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

wyrzuca błąd wspomnieć. Domyślam się, że powłoka w jakiś sposób przeszkadza w wysyłaniu danych podczas pomijania pojedynczych cudzysłowów.

edytuj: Używam bash.

2

Czy aktualizować CouchDB od źródła niedawno? Jeśli tak, usuń wszystkie stare pliki.

0

Powodem

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

Nie działa to, że cytaty są interpolowane przez powłokę używając apostrofów ucieka cytaty.

Powiązane problemy