API 请求中的单引号正文
Posted
技术标签:
【中文标题】API 请求中的单引号正文【英文标题】:Single-quoted body in API request 【发布时间】:2016-11-25 11:45:19 【问题描述】:我正在制作一个向 API 发出请求的 ios 应用。请求格式如下:
curl -X PUT -H "Content-Type: application/json" -d '"username":"blabla@hotmail.com","password":"blabla"' "https://server.mywebsite.com/login"
API 只能接受正文中的单引号字符串,但如果不添加反斜杠并使 API 无法读取字符串,我无法在 Swift 中创建带有单引号的字符串。
"\'\"email\": \"blabla@hotmail.com\", \"password\": \"blabla\"\'"
有没有一种方法可以在没有反斜杠的情况下在 Swift 中传递这个字符串?或者是否有该格式的字符串或 JSON 编码?
【问题讨论】:
I can't make a string with single quotes in Swift without it adding backslashes
当然是you can。你试过了吗?
curl 中的单引号仅在 Unix shell 中是必需的,它们实际上并不传输到服务器。服务器只看到 JSON "username":"blabla@hotmail.com","password":"blabla"
。所以在你的 Swift 中你只需要这个:"\"email\": \"blabla@hotmail.com\", \"password\": \"blabla\""
。但我不确定这是否是您的实际问题。
@hnh 你是对的。但也像我提到的那样,如果他们真的需要,他们可以包含单引号。我认为他们并不真正了解自己在问什么。
是的,我做到了。我收到错误“找到单引号文字,使用“””“我可以添加反斜杠以添加单引号,但反斜杠保留在字符串中并且 API 无法读取
@P.Stylianou 你可以在普通的 Swift 字符串中使用单引号,看看我在第一条评论中的截图。看起来你对某事感到困惑。请尝试向我们提供有关您的实际问题的更多详细信息,而不是您认为的问题。
【参考方案1】:
curl
中的单引号仅在 Unix shell 中需要(在命令行中引用双引号),它们实际上并没有传输到服务器。服务器只看到这个 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)
【讨论】:
以上是关于API 请求中的单引号正文的主要内容,如果未能解决你的问题,请参考以下文章