Raj*_*hta 6 json swift alamofire swift3
如何使用 Alamofire 请求获取流 JSON。我正在使用以下函数来获取响应
self.sessionManager?.request(url, method: methodType!, parameters: params, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseJSON { (response) in
if (response.result.error == nil) {
completion(response.result.value as AnyObject?, nil , response.response?.statusCode )
} else {
// debugPrint("HTTP Request failed: \(String(describing: response.result.error))")
completion(nil, response.result.error, response.response?.statusCode)
}
}
Run Code Online (Sandbox Code Playgroud)
我的 API Url 类似于
http://{server Url}/services/data/{块数}/{每个块中的项目数}
如果块数为 3 且每个块的项目数为 3,我从 API 得到的响应
data: [
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026419,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
}
]
data: [
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
}
]
data: [
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
},
{
"invalidDraft": false,
"bulkReserve": false,
"srNo": 0,
"returned": false,
"status": "ACTIVE",
"timestamp": 1580186026417,
}
]
data:done
Run Code Online (Sandbox Code Playgroud)
我没有得到服务器的任何响应,但在 Postman 中它工作正常。
小智 3
要接收流数据,您可以尝试添加
request.stream(closure: { data in ... })
Run Code Online (Sandbox Code Playgroud)
在闭包内部,您应该从服务器收集数据块,并在调用响应后最近解析它们。在这种情况下,响应将为零。
所以它会是这样的:
let mData = NSMutableData()
self.sessionManager?
.request(url, method: methodType!, parameters: params, encoding: JSONEncoding.default, headers: headers)
.validate()
.stream(closure: { data in mData.append(data) })
.response { response in
//parse mData
}
Run Code Online (Sandbox Code Playgroud)