如何使用Gloss将Alamofire的响应转换为[JSON]?

我正在用Gloss替换Swify
JSON库.我将WS响应转换为
JSON格式时遇到问题.


SwiftyJSON中我这样做了:

guard let data = response.result.value else  {
            ...
            return
        }

let jsonData = JSON(data)

我的回答如下:

[{
  "lat": "45.2",
  "lon": "-79.38333",
  "name": "Sample"
}, {
  "lat": "23.43",
  "lon": "45.3",
  "name": "Sample"
}]

我需要从这个创建一个JSON对象([JSON])数组,所以我可以在这个方法中使用:

let jsonArray = ?
guard let destinations = [Destination].fromJSONArray(jsonArray) else
{
    ...
    return
}

我试过了:

guard let data = response.result.value as? [(String,AnyObject)] else  {
            ...
            return
}

guard let data = response.result.value as? [Gloss.JSON] else  {
            ...
            return
}

第一个说:不能将'[(String,AnyObject)]’类型的值转换为预期的参数类型'[JSON]’
第二:条件绑定的初始化程序必须具有可选类型,而不是'[目标]’

最佳答案 我遇到了与问题完全相同的“第一”和“第二”错误消息完全相同的问题.贝娄是我如何解决它的摘录:

import Gloss
import Alamofire

...

Alamofire.request(.GET, url, parameters: params).responseJSON {
    response in switch response.result {
    case .Success(let json):
        // Here, stations is already an array of Station class
        let stations = [Station].fromJSONArray(json as! [Gloss.JSON])
        ...
    ...
}

这就是我的Station类:

import Gloss

class Station: Decodable {
    var id: Int = 0
    var attribute1: Int = 0
    var attribute2: Int = 0

    init(id: Int, attribute1: Int, attribute2: Int) {
        super.init()
        self.id = id
        self.attribute1 = attribute1
        self.attribute2 = attribute2
    }

    required init?(json: JSON) {
        super.init()
        self.id = ("id" <~~ json)!
        self.attribute1 = ("attribute1" <~~ json)!
        self.attribute2 = ("attribute2" <~~ json)!
    }
}
点赞