2013-09-04 48 views
25

Dưới đây là một ví dụ về dòng lệnh phù hợp với mô tả này:Làm thế nào để thoát khỏi dấu nháy đơn vào dấu ngoặc kép vào dấu nháy đơn

curl http://dumbdomain.com/solr/collection2/update/json -H 
'Content-type:application/json' -d ' { "add": { "doc": { "uid": 
"79729", "text" : "I''ve got your number"} } }' 

Tôi đã cố gắng \'(không thoát), url mã hóa (không urldecoded ở đầu kia!) và '' (quote biến mất!), mà không thành công.

+0

Sử dụng [ 'http' ] (http://github.com/jkbr/httpie) và không sử dụng tiêu đề của câu hỏi để gắn thẻ. –

Trả lời

47

Nếu bạn thay thế 'bởi unicode mã hóa' (được \ u0027), sau đó nó hoạt động:

curl http://dumbdomain.com/solr/collection2/update/json -H 'Content-type:application/json' -d ' { "add": { "doc": { "uid": "79729", "text" : "I\u0027ve got your number"} } }' 

Strange, nhưng đáng để biết!

+0

À, thật ra bạn muốn biết cách thoát khỏi một dấu nháy đơn? – dwxw

+0

Thật vậy, đó là tiêu đề của câu hỏi này: "Cách thoát khỏi dấu nháy đơn (...)". –

+0

Nó hoạt động giống hệt nhau cho "khi được mã hóa trong \ u0022 –

13

Cách giải quyết thông thường trong các trường hợp này là đặt dữ liệu vào tệp và đăng.

$ cat post.json 
{ "add": { "doc": { "uid": "79729", "text" : "I've got your number"} } } 

Và sau đó gọi:

curl -H "Content-type:application/json" --data @post.json http://dumbdomain.com/solr/collection2/update/json 

này sẽ lọai trừ nhu cầu thoát bất kỳ dấu ngoặc kép trong json.

+0

Vâng, thấy rằng trong các bài viết liên quan, nhưng tôi không muốn làm cho nó chậm hơn và phức tạp hơn chỉ để thoát khỏi một char! Chắc chắn phải có cách. BTW, tôi tìm thấy một cái gì đó và tôi đang thử nghiệm nó. –

+0

sửa lỗi tuyệt vời cho các trường hợp bạn cần thực hiện nhiều thao tác thoát. Tôi cũng đang tìm kiếm một chút nhanh chóng và thay thế cuộc gọi để thay thế 'và' bằng các đối tác \ u0022 và \ u0027 của chúng tôi –

2

Bạn có nghĩa là làm thế nào để có được JSON thông qua dòng lệnh chính xác? Nếu bạn đang sử dụng Windows thì bạn cần phải cẩn thận cách bạn thoát chuỗi của bạn. Nó hoạt động nếu bạn sử dụng dấu ngoặc kép xung quanh toàn bộ chuỗi dữ liệu và sau đó thoát khỏi dấu ngoặc kép cho JSON. Ví dụ:

curl http://dumbdomain.com/solr/collection2/update/json -H 'Content-type:application/json' -d "{ \"add\": { \"doc\": { \"uid\": \"79729\", \"text\" : \"I've got your number\"} } }" 
+0

Tôi đã đọc vòng ở đây mà thoát bằng^trên Windows sẽ thực hiện thủ thuật, nhưng đáng tiếc là tôi –

7

Trong trường hợp bạn đang sử dụng Windows (vấn đề này thường không xảy ra trên * nix), bạn có thể đường ống đầu ra từ echo để cuộn tròn để tránh thoát hoàn toàn:

echo {"foo": "bar", "xyzzy": "fubar"} | curl -X POST -H "Content-Type: application/json" -d @- localhost:4444/api/foo 
Các vấn đề liên quan