我目前正在学习Swift。我正在制作一个可以解析网站历史数据并在图表视图中显示这些数据的应用程序。我一直在使用Alamofire
来解析网页中的JSON
数据,并尝试遍历此结果并将这些数据存储在数组中。但是,在遍历JSON
结果时遇到问题。它说:
“类型'任何'不符合协议'序列'。
这是我编写的功能:
func getHistoryData(url: String) {
Alamofire.request(url).responseJSON { response in
print("Request: \(String(describing: response.request))") // original url request
print("Response: \(String(describing: response.response))") // http url response
print("Result: \(response.result)") // response serialization result
if let json = response.result.value {
print("JSON: \(json)") // serialized json response
for item in json { ***(The error happens here)***
}
}
if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
print("Data: \(utf8Text)") // original server data as UTF8 string
}
}
}
以下是网页中的回复样本:
{
"average": 4088.82,
"time": "2019-03-30 15:46:00"
},
{
"average": 4095.07,
"time": "2019-03-30 15:45:00"
},
{
"average": 4094.14,
"time": "2019-03-30 15:44:00"
},
{
"average": 4095.64,
"time": "2019-03-30 15:43:00"
},
{
"average": 4095.69,
"time": "2019-03-30 15:42:00"
如何获取所有“平均值”并将其存储在数组中?
答案 0 :(得分:0)
这实际上取决于您要获取的序列类型,但是在大多数情况下这应该可行。
更改
for item in json
到
var jsonparsed = JSON(json);
for item in jsonparsed.array
基于您的json,它看起来像这样:
var averages : [Float] = [];
if let json = response.result.value {
print("JSON: \(json)") // serialized json response
var jsonparsed = JSON(json);
for item in jsonparsed.array {
if let average = item["average"].float {
averages.append(average);
}
}
}
// do something with the `averages` array.