2013-09-04 18 views
25

Ecco un esempio di riga di comando che si adattano a questa descrizione:Come sfuggire apici singoli in doppi apici in singoli apici

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

Ho già provato \'(non sfuggito), URL codificato (non urldecoded a quest'altra fine!) e '' (citazione scompare!), senza successo.

+0

Usa [ 'http' ] (http://github.com/jkbr/httpie), e non utilizzare il titolo della domanda per taggarlo. –

risposta

47

Se si sostituisce 'da Unicode codificati' (che è \ u0027), allora funziona:

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

Strano, ma vale la pena di conoscere!

+0

Ah, quindi davvero volevi sapere come sfuggire un apostrofo? – dwxw

+0

Infatti. Questo è il titolo di questa domanda: "Come sfuggire alle virgolette singole (...)". –

+0

Funziona esattamente allo stesso modo per "quando codificato in \ u0022 –

13

Una soluzione normale in questi casi consiste nel mettere i dati in un file e pubblicare.

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

E poi invocare:

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

Questo sarebbe ovviare alla necessità di sfuggire eventuali citazioni in JSON.

+0

Sì, visto che nei post correlati, ma non voglio renderlo più lento e più complesso solo per sfuggire a un char! Ci deve essere un modo. A proposito, ho trovato qualcosa e lo sto testando. –

+0

correzione impressionante per le istanze in cui è necessario eseguire molte operazioni di escape. Sto anche cercando una piccola ricerca e sostituisco la chiamata per sostituire "e" con le loro controparti \ u0022 e \ u0027 –

2

Intendi dire come far passare correttamente il JSON tramite la riga di comando? Se utilizzi Windows, devi fare attenzione a come sfuggi alla stringa. Funziona se si usano virgolette sull'intera stringa di dati e quindi si evitano le virgolette per il JSON. Per esempio:

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

Ho letto qui che fuggire con^su Windows dovrebbe fare il trucco, ma sfortunatamente sono in questo modo su CentOS. –

7

Nel caso in cui si utilizza Windows (in genere questo problema non si verifica su * nix), è possibile inviare l'output da eco ad arricciarsi per evitare la fuoriuscita del tutto:

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