编辑:我已经在SO上阅读了相同问题的其他答案,但我无法获得所需的输出.我尝试过其他问题中提出的许多变化,但它不起作用.
我有一个JSON剪切,当我打开websocket时需要将其添加为正文.
sender: "system[email protected]",recipients:"system[email protected]",data: { text: "Test Message" },
所以使用Swift我做了以下,
var messageDictionary : [String: Any] = [ "sender": "system[email protected]","recipients":"system[email protected]","data": [ "text": "Test Message" ],] do { let jsonData = try JSONSerialization.data(withJSONObject: messageDictionary,options: .prettyPrinted) let jsonString = String(data: jsonData,encoding: String.Encoding.ascii) socket.write(string: jsonString!) print(jsonString) } catch { print(error.localizedDescription) }
当我打印jsonString时,我明白了
Optional("{\n \"sender\" : \"system[email protected]\",\n \"data\" : {\n \"text\" : \"Test Message\"\n },\n \"recipients\" : \"system[email protected]\"\n}")
作为控制台输出.我希望上面的代码片段格式化为JSON.
如何在没有/ n和其他空格的情况下将输出作为普通JSON?
我使用Swift 4和Xcode 9.1
编辑2:
let jsonData = try JSONSerialization.data(withJSONObject: messageDictionary,options: []) let decoded = try JSONSerialization.jsonObject(with: jsonData,options: [])
我尝试了上面这个,我得到以下作为输出:
{ data = { text = Test Message; }; recipients = "system[email protected]"; sender = "system[email protected]"; }
然而,websocket期望这样:
{ "sender":"system[email protected]","recipients": ["system[email protected]"],"data":{"text":"Test Message"}}
即使有一些轻微的变化,如错误放置双引号,websocket服务器也不接受输入.如何以这种方式精确格式化JSOn,以便websocket可以接受它?
解决方法
在尝试了各种方法后,以下方式对我来说是有用的,可以获得后端所需的确切格式.
var messageDictionary = [ "sender":"system[email protected]","recipients":["system[email protected]"],"data":[ "text" : data ] ] as [String : Any] let jsonData = try! JSONSerialization.data(withJSONObject: messageDictionary) let jsonString = Nsstring(data: jsonData,encoding: String.Encoding.utf8.rawValue)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。