API请求中的单引号正文

时间:2016-11-25 11:45:20

标签: ios swift string single-quotes

我正在制作一个向API发出请求的iOS应用。请求采用以下格式:

    @Path("/Path")
    public class TestServlet {

        @Path("/toPost")
        @POST
        @Consumes({MediaType.APPLICATION_JSON})
        @Produces({MediaType.APPLICATION_JSON})
        public Answer consume(Request request) {
            ArrayList<String> res = new ArrayList<String>();
            res.add(request.getSentence());
            return new Answer(res, "Good");
        }
    }

API只能接受正文中的单引号字符串,但我不能在Swift中使用单引号创建一个字符串,而不会添加反斜杠并使API无法读取该字符串。

curl -X PUT -H "Content-Type: application/json" -d '{"username":"blabla@hotmail.com","password":"blabla"}' "https://server.mywebsite.com/login"

有没有办法可以在没有反斜杠的情况下在Swift中传递这个字符串?或者是否采用该格式的String或JSON编码?

1 个答案:

答案 0 :(得分:1)

只需在Unix shell中引用curl中的单引号(引用命令行中的双引号),它们实际上并未传输到服务器。服务器只看到这个JSON有效负载:

{"username":"blabla@hotmail.com","password":"blabla"}

因此,在您的Swift API请求中,您可以从字符串中删除单引号:

let auth = "{\"email\": \"blabla@hotmail.com\", \"password\": \"blabla\"}"

这里是否有办法避免双引号的转义?不。在Swift中,你不能像在Python中那样在'"之间切换。也没有"""

由于在自己构建JSON时很容易出现引用错误,因此您可能希望使用JSONSerialization,如下所示:

let jsonAuth   = [ "email":    "blabla@hotmail.com",
                   "password": "blabla" ]
let jsonData   = JSONSerialization.data(withJSONObject: jsonAuth)
let jsonString = String(data: data, encoding: .utf8)