2016-11-18 100 views
0

當使用Alamofire檢索包含字符串的一個JSON和二進制,轉化爲JSON作品完美的罰款:如何使用SwiftyJSON將Swift中的二進制JSON轉換爲?

Alamofire.request(path, method: .get, parameters: parameters) 
      .validate() 
      .responseJSON { response in 
       switch response.result { 
       case .success: 
        print("GET request to '" + path + "' has been successful.") 
        if let value = response.result.value { 
         let json = JSON(value) 
         onCompletion(json as JSON, nil) 
        } 
       case .failure(let error): 
        onCompletion(nil, error as NSError?) 
       } 
     } 

現在我已經通過socket.io-client-swift的WebSockets實現,我希望做同樣的事情,即接收包含字符串以及二進制文件的JSON。發送工作正常,但不幸的是沒有收到來自服務器的消息。但是,我覺得現在的問題是從NSArrayJSON轉換,因爲打印數組的時候,結果是這樣的:

(
     { 
     bin = <ffd8ffe0 00104a46 49460001 [....] 51494b40 05251494 01ffd9>; 
     userId = 582d6f52b49e931d3fb6d56a; 
     bla = 1221321424214124214; 
     type = binary; 
    } 
) 

當通過SwiftyJSON轉換這個NSArray到JSON,我得到unknown

SocketIO.sharedInstance.onMessage({ data, ack in 
      print(data) // prints the array above 
      let json = JSON(data[0]) 
      print(json) // unknown 
      // do more stuff 
     }) 

如果我發短信,而不是bin,一切都運行得很好。我也嘗試使用JSON(data: data[0])初始值設定項,但由於類型錯誤,這不起作用。

什麼也似乎很奇怪,我是當我打印傳入消息用以下語句:

socket.on("message") {(dataArray, ack) -> Void in 
      print("Incoming: ", dataArray); 
} 

我得到下面的輸出,這似乎是一個嵌套的數組已被髮送,而不是一個數組有一個對象作爲它的第一個元素:

Incoming: [["userId": 582d6f52b49e931d3fb6d56a, "bla": 1221321424214124214, "type": binary, "bin": 205083 bytes]] 

這裏有什麼問題?

編輯:

我注意到,轉移二進制檢索通過REST和Socket.io消息時不同。具體而言,iOS的客戶端上,使用REST時,我收到以下:

bin =    { 
       data =     (
        255, 
        216, 
        255, 
        224, 
        0, 
        [.....], 
        161, 
        163, 
        68, 
        207, 
        255, 
        217 
       ); 
       type = Buffer; 
      }; 

當使用Socket.io,我收到這樣的:

bin = <ffd8ffe0 00104a46 49460001 01000048 [......]>; 

雖然JSON看起來是一樣的,當在傳輸消息之前記錄消息。

回答

0

顯然socket.io-client-swift無法處理緩衝區。我通過將緩衝區轉換爲Uint8Array,然後轉換爲普通陣列,然後通過websocket發送它來解決此問題:

Array.from(new Uint8Array(stored.bin.buffer)) 
相關問題