将 alamofire json 响应转换为变量
Posted
技术标签:
【中文标题】将 alamofire json 响应转换为变量【英文标题】:convert alamofire json response to variable 【发布时间】:2018-04-09 21:07:06 【问题描述】:我有一个问题,我已经在 *** 上问过好几次了,我已经尝试了所有这些问题,但没有一个有效。所以我很想再总结一下这个问题,并尝试更准确地描述它。
我正在构建一个应用程序,将图片发送到 python 后端,以便在 xcode swift 中进行图像识别。
我正在使用 Alamofire 上传, 这是上传部分:
Alamofire.upload(multipartFormData: multipartFormData in
multipartFormData.append(imageData!, withName: "pic", fileName: "filename.png", mimeType: "image/png")
, to: "http:123456.com/image",
method: .post,
encodingCompletion: encodingResult in
switch encodingResult
case .success(let upload, _, _):
upload.responseString response in
debugPrint(response)
case .failure(let encodingError):
print(encodingError)
这是我从服务器端得到的 json 响应:
[Response]: <NSHTTPURLResponse: 0x600000237de0> URL: 1234/image Status Code: 200, Headers
"Content-Length" = (
348
);
"Content-Type" = (
"text/html; charset=utf-8"
);
Date = (
"Mon, 09 Apr 2018 20:59:30 GMT"
);
Server = (
"Werkzeug/0.12.2 Python/2.7.12"
);
[Data]: 348 bytes
[Result]: SUCCESS:
"prediction": [
"name": "marshmallow",
"value": 0.2800232470035553
,
"name": "caesar salad",
"value": 0.090629942715168
,
"name": "egg",
"value": 0.07480788230895996
,
"name": "apple",
"value": 0.049235329031944275
,
"name": "chickpea",
"value": 0.04692944884300232
]
[Timeline]: Timeline: "Request Start Time": 545000363.584, "Initial Response Time": 545000363.642, "Request Completed Time": 545000370.462, "Serialization Completed Time": 545000370.487, "Latency": 0.058 secs, "Request Duration": 6.879 secs, "Serialization Duration": 0.025 secs, "Total Duration": 6.903 secs
所以,我想要的目的只是打印第一个预测名称的名称。
就像输出是
结果是棉花糖,值为 0.28
我尝试了几种方法:
首先,我想要一个结构来将名称存储为字符串,值存储为双精度,并使用循环来解析它。但无论我尝试什么,我总是得到一个“null”作为输出,或者什么都没有。
对此有什么建议吗?提前致谢。
【问题讨论】:
【参考方案1】:试试这个:
upload.responseJSON response in
if let result = response.result.value
let json = result as! [String: Any]
if let predictionArray = json["prediction"] as? [[String: Any]],
let firstPrediction = predictionArray.first
print(firstPrediction)
print(json)
【讨论】:
伙计,我还有一个问题,如果我也想显示第二个预测怎么办?我尝试使用 predictionArray.second,它给了我“第二个”不是 [String: Any] 的成员。你对此有什么想法吗? if predictionArray.count > 0 let secondPrediction = predictionArray[1] ,如果你想要所有这些,那么使用:predictionArray.forEach print($0) 伙计,这非常有帮助。但是现在我面临另一个问题,我想在另一个视图控制器中使用这个东西,所以我需要将这个数组元素转换为可以在标签中显示的字符串,我尝试了几种方法,但它总是给我的错误。有什么想法吗?以上是关于将 alamofire json 响应转换为变量的主要内容,如果未能解决你的问题,请参考以下文章
如何将 json 数据从 alamofire 转换为 swift 对象
Alamofire 无法将 NSCFString 类型转换为字典