2017-11-28 16 views
0

編集:私は同じ問題のためにSOの他の答えを読んだが、Imは希望の出力を得ることができません。私は他の質問で示唆されているように多くのバリエーションを試しましたが、うまくいきませんSwift 4の辞書からJSONを作成する方法は?

WebSocketを開いたときに本体として追加する必要があるJSONスナップがあります。

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

だから私はjsonStringを印刷するとき、私はコンソール出力として

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

を取得するが、私は次のことをやった

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) 
    } 

をスウィフトを使用して私は上記のスニペットをJSONとしてフォーマットすることを期待していました。 /nと追加のスペースがない通常のJSONとして出力を取得するにはどうすればよいですか? スウィフト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 = "[email protected]"; 
     sender = "[email protected]"; 
    } 

のWebSocketはこのことを期待するしかし、 :

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

E Webサーバーのサーバーは入力を受け付けません。どのようにしてwebSocketがそれを受け入れることができるようにJSOnをこのように正確にフォーマットするのですか?

+0

何を求めていることは実際に辞書自体JSONは、あなたが直接あなたが文字列としてその事を渡す場合、あなたが文字列無関係 –

+0

にデータを変換する必要があるがあるだけで、 'Data'オブジェクトを渡すことができ、不要なものですUTF-8ではなくASCIIエンコーディングが本当に確実でしょうか? – rmaddy

+0

はい、UTF-8である必要があります。それを指摘してくれてありがとう! – SeaWarrior404

答えて

0

さまざまな方法を試した後、バックエンドで必要とされる正確なフォーマットを取得するために私のために働いたのは以下の方法です。

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) 
関連する問題