如何从json转换为我的类和对象的对象反之亦然(使用alamofire,SwiftyJSON)

时间:2016-05-12 21:15:45

标签: ios json swift2 alamofire swifty-json

我正在使用带有xcode 7.3.1的Swift 2。

我有Alamofire 3.4&我的项目中SwiftyJSON。我知道我可以使用以下代码将响应结果值从Alamofire转换为JSON(由SwiftyJSON定义的结构)类型:

Alamofire.request(.GET, url).validate().responseJSON { response in
    switch response.result {
    case .Success:
        if let value = response.result.value {
          // now I get JSON type object, then what?
          let json = JSON(value)
          print("JSON: \(json)")
        }
    case .Failure(let error):
        print(error)
    }
}

我的问题是在我得到json后,如何将其转换为自定义类的对象?

例如,json具有以下结构:

{"name": 
 "Kate", 
 "age": 23, 
 "books":[{"id":1,"name":"book-1"},{"id":2,"name":"book-2"}]
}

我有一个Swift课程:

class Student {
  var name: String!
  var age: Int!
  var books:[Book]
  ...
}

class Book {
  var id: Int!
  var name: String!
  ...
}

我如何将json转换为Student个对象,反之亦然,使用Alamofire& SwiftyJSON?

(我是iOS的新手,我刚发现互联网上的人建议这两个库用于JSON响应处理,所以我使用它们。请指出我是否没有必要或是否有其他有效的方法来实现它。在此先感谢。)

1 个答案:

答案 0 :(得分:1)

我认为你可以在 Book Student 结构中添加json数据的转换方法,使用 Struct 而不是 Class 在Swift中。我写了一些示例代码,

struct Book {
    var id: Int
    var name: String

    static func booksFromJSONArray(jsonArray: [JSON]) -> [Book]? {
        return jsonArray.flatMap{ jsonItem -> Book in
            guard let id = jsonItem["id"].int,
                let name = jsonItem["name"].string
             else { return nil }

            return Book(id: id, name: name)
    }
}


struct Student {
    var name: String
    var age: Int
    var books: [Book]

    func studentFromJSONData(jsonData: JSON) -> Student {
        let name = jsonData["name"].stringValue
        let age = jsonData["age"].intValue
        let books = Book.booksFromJSONArray(jsonData["books"].arrayValue)

        return Student(name: name, age: age, books: books)
    }
}