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 请求中的单引号正文的主要内容,如果未能解决你的问题,请参考以下文章

JS中的单引号和双引号

JS中的单引号和双引号

SQL语言中的单引号与双引号区别

js中的单引号与双引号[重复]

jQuery中的单引号或双引号[重复]

Python中的单引号双引号三引号