webentwicklung-frage-antwort-db.com.de

Wie erstelle ich JSON aus einem Wörterbuch in Swift 4?

Bearbeiten: Ich habe die anderen Antworten auf SO für das gleiche Problem gelesen, bin jedoch nicht in der Lage, die gewünschte Ausgabe zu erhalten. Ich habe viele Variationen ausprobiert, wie in anderen Fragen vorgeschlagen, aber es funktioniert nicht.

Ich habe ein JSON-Snipped, das als Body hinzugefügt werden muss, wenn ich einen Websocket öffne.

  sender: "[email protected]",
  recipients:"[email protected]",
  data: {
  text: "Test Message"
   },

Also habe ich mit Swift Folgendes gemacht:

    var messageDictionary : [String: Any] = [
        "sender": "[email protected]",
        "recipients":"[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)
    }

Wenn ich den jsonString drucke, bekomme ich

    Optional("{\n  \"sender\" : \"[email protected]\",\n  \"data\" : {\n    
    \"text\" : \"Test Message\"\n  },\n  \"recipients\" : 
    \"[email protected]\"\n}")

als Konsolenausgabe. Ich habe erwartet, dass das obige Snippet als JSON formatiert wird. Wie bekomme ich die Ausgabe als normales JSON ohne die/n und zusätzliche Leerzeichen? Ich benutze Swift 4 und Xcode 9.1

Edit 2 :

   let jsonData = try JSONSerialization.data(withJSONObject: messageDictionary, options: [])
   let decoded = try JSONSerialization.jsonObject(with: jsonData, options: [])

Ich habe versucht, das oben genannte zu tun und ich erhalte das folgende als die Ausgabe:

    {
        data =     {
            text = Test Message;
    };
        recipients = "[email protected]";
        sender = "[email protected]";
    }

Das Websocket erwartet dies jedoch:

    { "sender":"[email protected]","recipients":
    ["[email protected]"],"data":{"text":"Test Message"}}

Selbst mit einer geringfügigen Abweichung wie dem Versetzen von Anführungszeichen akzeptiert der Websocket-Server die Eingabe nicht. Wie formatiere ich die JSOn genau so, dass das Websocket sie akzeptieren kann?

4
SeaWarrior404

Nachdem ich verschiedene Möglichkeiten ausprobiert hatte, funktionierte der folgende Weg für mich, um das genaue Format zu erhalten, das vom Backend benötigt wird.

    var messageDictionary = [
        "sender":"[email protected]",
        "recipients":["[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)
7
SeaWarrior404

Darüber hinaus können Sie einfach in String umwandeln

let jsonData = try? JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
let jsonString = String(data: jsonData!, encoding: .utf8)
0
Chris Peragine