当前位置 : 主页 > 手机开发 > 其它 >

如何在Swift 4中从字典创建JSON?

来源:互联网 收集:自由互联 发布时间:2021-06-11
编辑:我已经在SO上阅读了相同问题的其他答案,但我无法获得所需的输出.我尝试过其他问题中提出的许多变化,但它不起作用. 我有一个JSON剪切,当我打开websocket时需要将其添加为正文
编辑:我已经在SO上阅读了相同问题的其他答案,但我无法获得所需的输出.我尝试过其他问题中提出的许多变化,但它不起作用.

我有一个JSON剪切,当我打开websocket时需要将其添加为正文.

sender: "system1@example.com",
  recipients:"system2@example.com",
  data: {
  text: "Test Message"
   },

所以使用Swift我做了以下,

var messageDictionary : [String: Any] = [
        "sender": "system1@example.com",
        "recipients":"system2@example.com",
        "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\" : \"system1@example.com\",\n  \"data\" : {\n    
    \"text\" : \"Test Message\"\n  },\n  \"recipients\" : 
    \"system2@example.com\"\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 = "system1@example.com";
        sender = "system2@example.com";
    }

然而,websocket期望这样:

{ "sender":"system1@example.com","recipients":
    ["system2@example.com"],"data":{"text":"Test Message"}}

即使有一些轻微的变化,如错误放置双引号,websocket服务器也不接受输入.如何以这种方式精确格式化JSOn,以便websocket可以接受它?

在尝试了各种方法后,以下方式对我来说是有用的,可以获得后端所需的确切格式.

var messageDictionary = [
        "sender":"system1@example.com",
        "recipients":["system2@example.com"],
        "data":[
            "text" : data
        ]
        ] as [String : Any]

        let jsonData = try! JSONSerialization.data(withJSONObject: messageDictionary)
        let jsonString = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)
网友评论