2013-09-04 21 views
25

Ниже приведен пример командной строки, которые соответствуют этому описанию:Как избежать одинарные кавычки в двойные кавычки в одиночные кавычки

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

Я уже пытался \»(не ускользнуло), в кодировке URL (не urldecoded на этом другом конце!) и '' (цитата исчезает!), без успеха.

+0

Используйте [ 'http' ] (http://github.com/jkbr/httpie), и не используйте заголовок вопроса, чтобы пометить его. –

ответ

47

Если заменить 'на Юникоде' (который \ u0027), то она работает:

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

Странно, но стоит знать!

+0

А, так действительно вы хотели знать, как избежать апострофа? – dwxw

+0

Действительно. Это название этого вопроса: «Как избежать одиночных кавычек (...)». –

+0

Он работает точно так же для "при кодировании в \ u0022 –

13

Обычным обходным решением в таких случаях является размещение данных в файле и публикация.

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

И затем вызвать:

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

Это устранило бы необходимость избежать каких-либо цитат в формате JSON.

+0

Да, видел, что в связанных сообщениях, но я не хочу делать это медленнее и сложнее, чтобы избежать одного символа! Должен быть способ. Кстати, я нашел что-то, и я его тестирую. –

+0

Огромное исправление для случаев, когда вам нужно много ускользать. Я также изучаю быстрый поиск и замену вызова на замену «и» своими аналогами u0022 и u027. –

2

Вы имеете в виду, как правильно получить JSON через командную строку? Если вы используете Windows, тогда вам нужно быть осторожным, как вы избегаете своей строки. Он работает, если вы используете двойные кавычки вокруг всей строки данных, а затем избегаете двойных кавычек для JSON. Например:

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

. Я читал здесь, что экранирование с помощью^на Windows должно делать трюк, но, к сожалению, я дозируя это на CentOS. –

7

В случае, если вы используете ОС Windows (эта проблема, как правило, не возникает на * Никс), вы можете трубы выход из эхо свернуться, чтобы избежать побега в целом:

echo {"foo": "bar", "xyzzy": "fubar"} | curl -X POST -H "Content-Type: application/json" -d @- localhost:4444/api/foo