2010-07-27 20 views
16

Điều này hơi khác với câu hỏi có tiêu đề "Lỗi về" JSON không hợp lệ "với chế độ xem couchDB nhưng tốt của json": Tôi không cố gắng tải tệp lên chỉ nhập một tài liệu đơn giản.Curl đưa ra lỗi "Invalid UTF-8 JSON" từ CouchDb mặc dù JSON là tốt? Ý tưởng nào?

Ví dụ tôi đang cố gắng sử dụng thực sự là từ cuốn sách của O'Reilly "CouchDB: The Definitive Guide" và tôi khá chắc chắn rằng tôi đã thử nó trước và làm cho nó hoạt động. Đây là lệnh:

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

Album cơ sở dữ liệu tồn tại và tên người dùng và mật khẩu là chính xác. Tôi đã kiểm tra điều này với JSONLint và JSON là hợp lệ và tôi đang thua lỗ ... có lẽ có vấn đề với chính máy chủ CouchDB nhưng dường như nó đang chạy đúng ... bất kỳ ý tưởng nào? Điều này là lái xe cho tôi hạt!

Cảm ơn

+0

tiêu đề phản hồi là gì? – Anders

+0

Bạn đã nâng cấp chiếc ghế dài của mình chưa? Tôi gặp vấn đề này sau khi nâng cấp từ 0.10 lên 1.0. Điều gì sẽ xảy ra nếu bạn chạy bộ thử nghiệm? – filippo

Trả lời

22

Xin cảm ơn các bạn. Hóa ra đó là một vấn đề với báo giá thoát. Đây là câu trả lời tôi nhận được từ David trên danh sách gửi thư của người dùng CouchDB:

Đây là điều cửa sổ liên quan đến trích dẫn - PITA thực. Rất tiếc, vỏ cmd.exe trên cửa sổ không phân tích cú pháp chính xác. Các quy tắc cho thời thoát với một "" hay a^"hoặc \" là một chút mơ hồ nhưng công trình này:

C: \ tmp> curl -X PUT http://username:[email protected]:5984/albums/6e1295ed6c29495e54cc05947f18c8af -d "{\" title \ ": \" Không có gì còn lại để mất \ ", \" nghệ sĩ \ ": \" Foo Máy bay chiến đấu \ "}" {"ok": true, "id": "6e1295ed6c29495e54cc05947f18c8af", "rev": " 1-4b39c2971c9ad54cb37e08fa02fec636 "}

C: \ tmp>

"về cơ bản bạn cần phải \" thoát \" tất cả \ "dấu ngoặc kép \" trong JSON của bạn"

này sửa chữa vấn đề của tôi

+2

Không còn cách nào khác? Ý tôi là, dấu ngoặc kép thoát có vẻ giống như một PITA. – Das

+0

Đây là giới hạn của vỏ. Một cách khác là đặt JSON vào một tệp và sử dụng -d @filename – AlexT

+0

@Das: Tôi đã giải quyết nó bằng cách cài đặt Git. Nó bao gồm Git Bash với curl. – null

0

Tôi cũng đã gặp cùng một vấn đề, sau khi tìm kiếm một thời gian, tôi thấy về Git Bash trong câu hỏi khác. Git bash có lệnh curl bên trong. Git bash được bao gồm trong trình cài đặt Git.

0

Bạn phải đặt ký tự escap ** và cũng đừng quên đặt sau -d tất cả mọi thứ trong ** "". Tức là: curl -X PUT http://127.0.0.1:5984/my_database/ "001" -d "{\" Tên \ ": \" Suresh \ ", \" tuổi \ ": \" 32 \ ", \" Chỉ định \ ": \" Trình quản lý kết hợp \ "}"

Các vấn đề liên quan