开发者

Curl giving "Invalid UTF-8 JSON" error from CouchDb although JSON is fine? Any ideas?

开发者 https://www.devze.com 2023-01-09 16:04 出处:网络
This is slightly different from the question titled \"Error about ‘invalid JSON’ with couchDB view but the json’s fine\": I am not trying to upload a file only enter a simple document.

This is slightly different from the question titled "Error about ‘invalid JSON’ with couchDB view but the json’s fine": I am not trying to upload a file only enter a simple document.

The example I am trying to use is actually from O'Reilly's book "CouchDB: The Definitive Guide" and I am pretty开发者_如何学Go sure that I have tried it before and got it to work. Here's the command:

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

The database albums exists and the username and password are correct. I have checked this with JSONLint and the JSON is valid and I am at a loss ... presumably there is an issue with the CouchDB server itself but it appears to be running correctly ... any ideas? This is driving me nuts!

Thanks


Thanks guys. Turns out it's a problem with quote escaping. Here's the answer I got from David on the CouchDB user mailing list:

This is a windows thing regarding quoting - a real PITA. Unfortunately cmd.exe shell on windows doesn't parse this correctly. The rules for when escaping with a "" or a ^" or a \" are a bit vague but this works:

C:\tmp>curl -X PUT http://username:password@127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af -d "{\"title\":\"There is Nothing Left to Lose\",\"artist\":\"Foo Fighters\"}" {"ok":true,"id":"6e1295ed6c29495e54cc05947f18c8af","rev":"1-4b39c2971c9ad54cb37e08fa02fec636"}

C:\tmp>

"basically you need to \"escape\" all \"quotes\" within your JSON"

This fixes my problem


I also met same problem, after searching a while, I found about Git Bash in other question. Git bash has curl command inside. The git bash is included in Git installer.


You have to put the escap characterstic ** and also do not forgot to put after -d all things in **"". I.e : curl -X PUT http://127.0.0.1:5984/my_database/"001" -d "{\"Name\":\"Suresh\",\"age\":\"32\",\"Designation\":\"Associates Manager\"}"

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号