服务器不接受转义编码字符串,但硬编码字符串为

时间:2018-03-22 19:35:43

标签: swift

我正在使用以下内容将字典转换为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不喜欢,我不明白。变量具有硬编码字符串的精确值但不被接受 - 是什么给出的?

1 个答案:

答案 0 :(得分:0)

如果我将String变量格式化为值为

,那么它是有效的
{"i":2,"n":"WebAuthenticateUser","o":"{\"Password\":\"Versett1234!\",\"UserName\":\"jesse@versett.com\"}","m":0}

我不知道为什么变量需要不同的转义而不是硬编码的呼叫,但它有效。