2017-11-28 9 views
0

Edit: Ich habe die anderen Antworten auf SO für das gleiche Problem gelesen, aber ich kann nicht die gewünschte Ausgabe erhalten. Ich habe viele Variationen versucht, wie in anderen Fragen vorgeschlagen, aber es funktioniert nicht.Wie erstelle ich JSON aus einem Wörterbuch in Swift 4?

Ich habe ein JSON geschnippt, die als Körper hinzugefügt werden muss, wenn ich einen Websocket öffne.

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

mit Swift Also habe ich die folgenden,

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 das jsonString drucken, ich

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

als Konsolenausgabe erhalten. Ich habe erwartet, dass das obige Snippet als JSON formatiert wird. Wie bekomme ich die Ausgabe als normale JSON ohne die/n und zusätzliche Leerzeichen? Im mit 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 die oben versucht zu tun und ich folgende als Ausgabe:

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

jedoch die websocket dies erwartet :

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

E Mit einer leichten Abweichung wie das Verlegen von doppelten Anführungszeichen akzeptiert der Websocket-Server die Eingabe nicht. Wie formatiere ich den JSOn so, dass der Websocket ihn akzeptiert?

+0

Was Sie fordern ist nicht erforderlich, was, eigentlich Wörterbuch selbst ein JSON, können Sie direkt übergeben 'Data' Objekt, wenn Sie das Ding als String übergeben dann nur Sie Daten zu String –

+0

Unrelated konvertieren müssen, sind aber Sie wirklich sicher, dass Sie ASCII-Codierung und nicht UTF-8 wollen? – rmaddy

+0

Ja, es sollte UTF-8 sein. Danke für das Aufzeigen! – SeaWarrior404

Antwort

0

Nachdem ich verschiedene Wege ausprobiert habe, habe ich versucht, das exakte Format zu finden, das vom Backend benötigt wird.

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