在Swift中将String转换为json,用于在WebSocket中发送

avwztpqn  于 11个月前  发布在  Swift
关注(0)|答案(2)|浏览(124)

我有一个JS通过WebSocket发送JSON。如下所示:

function senddata()
{
    var obj = {};
    var arrayOfRequests = [];
    arrayOfRequests.push({
        "id":22,                                                                            
        "repeat":false,
    })
    obj.DataReq = arrayOfRequests;
    var stringToSend = JSON.stringify(obj);
    websocketConnection.send( stringToSend );  
}

字符串
这段代码按预期工作,服务器发回请求的信息。
我在Swift中也做了同样的事情。

func send(text: String) {
        let message = text 
        guard let json = try? JSONEncoder().encode(message), 
            let jsonString = String(data: json, encoding: .utf8)
        else {
            return
        }
        webSocketTask?.send(.string(jsonString)){ error in 
            if let error = error {
                print("Error sending message", error) 
            }
        }
    }
send(text: "{“DataReq”:[{“id”:22,“repeat”:false}]}")


这样,服务器就不会发送任何响应。
如果将这两个示例连接到WebSocket回显服务器
JS代码发送{“DataReq”:[{“id”:22,“repeat”:false}]}
而Swift代码发送“{“DataReq”:[{“id”:9,“repeat”:false}]}"。
任何帮助都是感激的。

hec6srdp

hec6srdp1#

将JSON字符串编码为JSON是没有意义的。

func send(text: String) {
    webSocketTask?.send(.string(text)){ error in 
        if let error = error {
            print("Error sending message", error) 
        }
    }
}

字符串
send行中,双引号无效。

send(text: #"{"DataReq":[{"id":22,"repeat":false}]}"#)

pw9qyyiw

pw9qyyiw2#

试试这个:

func sendMessage(_ session: String) {
    let message: [String: Any] = [
        "reason": "limit",
        "withRefetchSessionList": false,
        "session": [session]
    ]

    let json: [String: Any] = [
        "message": message
    ]

    let jsonData = try? JSONSerialization.data(withJSONObject: json)
    let jsonString = String(data: jsonData!, encoding: .utf8)
    
    let workItem = DispatchWorkItem{ [weak self] in
     self!.webSocketTask.send(.string(jsonString!),completionHandler: { error in

                    if error == nil {
                        print("Sended")
                        
                    }else{
                        print("ERER: \(error as Any)")
                    }
                })
            }
            
            DispatchQueue.global().asyncAfter(deadline: .now() + 1, execute: workItem)
}

字符串

相关问题