这是符合此描述的命令行示例:
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 编码(未在另一端进行urldecode!)和''(引号消失!),但没有成功。
如果将 ' 替换为 unicode 编码的 ' (即 \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"} } }'
奇怪,但值得知道!
在这种情况下,通常的解决方法是将数据放入文件中并发布。
$ 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 中任何引号的需要。
In case you're using Windows (this problem typically doesn't occur on *nix), you can pipe the output from echo to curl to avoid the escaping altogether:
echo {"foo": "bar", "xyzzy": "fubar"} | curl -X POST -H "Content-Type: application/json" -d @- localhost:4444/api/foo
您的意思是如何正确获取通过命令行传递的 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\"} } }"