2017-11-28 21 views
0

편집 : 나는 동일한 문제에 대한 다른 답변을 읽었으나 원하는 출력을 얻을 수 없습니다. 다른 질문에서 제안 된 것처럼 많은 변형을 시도했지만 효과가 없습니다.Swift 4에서 사전에서 JSON을 만드는 방법은 무엇입니까?

webSocket을 열 때 본문으로 추가해야하는 JSON 스 니프가 있습니다.

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

것은 그래서 스위프트를 사용하여 나는이 jsonString를 인쇄 할 때은 다음,

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

, 나는 콘솔 출력으로

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

을 얻었다. 위의 스 니펫을 JSON으로 포맷해야합니다. /n 및 추가 공백없이 일반 JSON 출력을 얻는 방법은 무엇입니까?

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]"; 
    } 

가 웹 소켓이 기대하지만 스위프트 4와 엑스 코드 9.1

편집 2를 사용 임 :

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

E ven에 websocket 서버가 입력을 받아 들일 수없는 큰 따옴표의 잘못된 배치와 같은 약간의 변화가 있습니다. JSOn을 웹 포캣이 받아 들일 수 있도록 정확히 포맷하는 법?

+0

당신이 요구하는 것은 불필요한 것은 당신이 문자열로 그 일을 전달하는 경우 직접에만 문자열 –

+0

관련없는 데이터를 변환해야되지만, 다음, Data' 개체'전달할 수 있습니다, 사실, 사전 자체가 JSON입니다 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)