2016-11-18 67 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)) 
相关问题