web-dev-qa-db-fra.com

Comment échapper des guillemets simples en guillemets doubles en guillemets simples

Voici un exemple de ligne de commande qui correspond à cette description:

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

J'ai déjà essayé\'(non échappé), url encodé (non urldécodé à cette autre extrémité!) Et' '(citation disparaître!), Sans succès.

30
Pr Shadoko

Si vous remplacez "par unicode encoded" (qui est\u0027), alors cela fonctionne:

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

Étrange, mais vaut le détour!

54
Pr Shadoko

Une solution de contournement habituelle dans de tels cas consiste à placer les données dans un fichier et à les publier.

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

Et puis invoquez:

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

Cela éviterait d'échapper à toute citation dans le json.

15
devnull

Dans le cas où vous utilisez Windows (ce problème ne se produit généralement pas sur * nix), vous pouvez diriger la sortie d'écho vers curl pour éviter tout échappement:

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

Voulez-vous dire comment faire passer correctement le JSON via la ligne de commande? Si vous utilisez Windows, vous devez faire attention à la façon dont vous échappez à votre chaîne. Cela fonctionne si vous utilisez des guillemets doubles autour de la chaîne de données entière, puis échappez aux guillemets doubles pour le JSON. Par exemple:

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