35

这是符合此描述的命令行示例:

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!)和''(引号消失!),但没有成功。

4

4 回答 4

62

如果将 ' 替换为 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"} } }'

奇怪,但值得知道!

于 2013-09-04T11:35:37.260 回答
20

在这种情况下,通常的解决方法是将数据放入文件中并发布。

$ 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 中任何引号的需要。

于 2013-09-04T11:22:46.057 回答
13

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
于 2014-04-17T21:59:45.107 回答
3

您的意思是如何正确获取通过命令行传递的 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\"} } }"
于 2013-09-04T11:29:54.607 回答