首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从json转换为我们类的对象&反之亦然(使用alamofire,SwiftyJSON)

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

Stack Overflow用户
提问于 2016-05-12 21:15:44
回答 1查看 2.3K关注 0票数 0

我在xcode 7.3.1中使用Swift 2。

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

代码语言:javascript
复制
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具有以下结构:

代码语言:javascript
复制
{"name": 
 "Kate", 
 "age": 23, 
 "books":[{"id":1,"name":"book-1"},{"id":2,"name":"book-2"}]
}

我有一堂斯威夫特课:

代码语言:javascript
复制
class Student {
  var name: String!
  var age: Int!
  var books:[Book]
  ...
}

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

我如何将json转换为Student对象,反之亦然?

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

EN

回答 1

Stack Overflow用户

发布于 2016-05-13 10:03:08

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

代码语言:javascript
复制
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)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37197520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档