我在通过JSON响应进行迭代时遇到问题

时间:2019-03-30 15:39:03

标签: json swift

我目前正在学习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"

如何获取所有“平均值”并将其存储在数组中?

1 个答案:

答案 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.