我正在使用以下内容将字典转换为JSON字符串:
var toJSONString : String {
let dictionary = self.data
do {
//Convert to Data
let jsonData = try JSONSerialization.data(withJSONObject: dictionary, options: [])
//Convert back to string. Usually only do this for debugging
if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
let string = JSONString.replacingOccurrences(of: "\"", with: "\\\"")
return string
}
} catch {
}
return ""
}
返回一个完全相同的字符串:
"{\"m\":0,\"i\":2,\"n\":\"Authenticate\",\"o\":\"{\\\"Password\\\":\\\"XXXXXXXX\\\",\\\"UserName\\\":\\\"XXXX@XXXX.com\\\"}\"}"
我发送的websocket不接受字符串变量:
socket.write(String: object.toJSONString)
尽管字符串具有正确的值 - 我知道这一点,因为如果我将该确切的字符串手动复制到函数中,它会起作用,我从websocket返回一个auth令牌:
socket.write(String: "{\"m\":0,\"i\":2,\"n\":\"Authenticate\",\"o\":\"{\\\"Password\\\":\\\"XXXXXXXX\\\",\\\"UserName\\\":\\\"XXXX@XXXX.com\\\"}\"}")
显然有一些关于字符串的编码,websocket不喜欢,我不明白。变量具有硬编码字符串的精确值但不被接受 - 是什么给出的?
答案 0 :(得分:0)
如果我将String变量格式化为值为
,那么它是有效的{"i":2,"n":"WebAuthenticateUser","o":"{\"Password\":\"Versett1234!\",\"UserName\":\"jesse@versett.com\"}","m":0}
我不知道为什么变量需要不同的转义而不是硬编码的呼叫,但它有效。