2010-07-27 7 views
16

Ceci est légèrement différent de la question intitulée "Erreur à propos de 'JSON invalide' avec vue couchDB mais le json est bien": Je ne cherche pas à télécharger un fichier seulement entrer un document simple. L'exemple que j'essaie d'utiliser est en fait tiré du livre d'O'Reilly intitulé "CouchDB: The Definitive Guide" et je suis presque sûr de l'avoir déjà essayé et de le faire fonctionner. Voici la commande:Curl donnant une erreur "Invalid UTF-8 JSON" de CouchDb bien que JSON soit correct? Des idées?

curl -X PUT http://username:[email protected]:5984/albums/6e1295ed6c29495e54cc05947f18c8af -d '{"title":"There is Nothing Left to Lose","artist":"Foo Fighters"}' 

Les albums de base de données existent et le nom d'utilisateur et le mot de passe sont corrects. J'ai vérifié ceci avec JSONLint et le JSON est valide et je suis à une perte ... vraisemblablement il y a un problème avec le serveur de CouchDB lui-même mais il semble fonctionner correctement ... toutes les idées? Ça me rend dingue!

Merci

+0

que disent les en-têtes de réponse? – Anders

+0

Avez-vous mis à jour votre couchdb? J'ai eu ce problème après une mise à niveau de 0.10 à 1.0. Que se passe-t-il si vous exécutez la suite de tests? – filippo

Répondre

22

Merci les gars. Il s'avère que c'est un problème avec l'échappement de devis. Voici la réponse que je suis arrivé de David sur la liste de diffusion des utilisateurs CouchDB:

Ceci est une chose windows concernant citant - un véritable PITA. Malheureusement cmd.exe shell sur Windows ne pas analyser correctement. Les règles pour quand s'échapper avec un "" ou^"ou \" sont un peu vague mais cela fonctionne:

C: \ tmp> boucle -X PUT http://username:[email protected]:5984/albums/6e1295ed6c29495e54cc05947f18c8af -d "title {\" \ ": \" Il n'y a rien à perdre \ ", \" artiste \ ": \" Foo Fighters \ "}" {"ok": true, "id": "6e1295ed6c29495e54cc05947f18c8af", "rev": " 1-4b39c2971c9ad54cb37e08fa02fec636 "}

C: \ tmp>

"fondamentalement, vous devez \" échapper \" \ tous "citations \" au sein de votre JSON »

Cela corrige mon problème

+2

N'y a-t-il pas d'autre moyen? Je veux dire, s'échapper des citations semble être un PITA. – Das

+0

Ceci est une limitation de la coque. Une alternative serait de mettre le JSON dans un fichier, et d'utiliser -d @filename – AlexT

+0

@Das: Je l'ai résolu en installant Git. Il comprend Git Bash avec curl. – null

0

J'ai aussi rencontré même problème, après la recherche d'un certain temps, je trouve à environ Git Bash dans d'autres questions. Git bash a la commande curl à l'intérieur. Le git bash est inclus dans l'installeur Git.

0

Vous devez mettre la caractéristique d'échappement ** et aussi ne pas oublier de mettre après -d toutes les choses dans ** "". Ie: curl -X PUT http://127.0.0.1:5984/my_database/ "001" -d "{\" Nom \ ": \" Suresh \ ", \" age \ ": \" 32 \ ", \" Désignation \ ": \" Gestionnaire des associés \ "}"