當使用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。發送工作正常,但不幸的是沒有收到來自服務器的消息。但是,我覺得現在的問題是從NSArray
到JSON
轉換,因爲打印數組的時候,結果是這樣的:
(
{
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看起來是一樣的,當在傳輸消息之前記錄消息。