我正在制作一个向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编码?
答案 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)