【问题标题】:Deserialising JSON from Alamofire - Swift从 Alamofire 反序列化 JSON - Swift
【发布时间】:2015-11-12 15:38:25
【问题描述】:

我通过以下格式的 Alamofire GET 请求接收到一些 json。

{
  "result" : {
    "id" : 3456543
  },
  "error" : 0,
  "success" : "True"
}

有没有一种直接的方法来迭代它并将内容放入一个类中,这样我可能会有类似...

class Issues {
    var success: String?
    var error: Int?
    var resultId: Int?
}

【问题讨论】:

    标签: json swift class deserialization


    【解决方案1】:

    您应该考虑将 SwiftyJSON 与 Alamofire 一起使用。有一个简短的例子here

    但是,要回答您的问题,对于 Swift 2,您可以这样做:

    Alamofire.request(.GET, "http://mywebservice/getstuff", parameters: nil)
        .responseJSON { response in
            if let json = response.result.value {
                let issue:Issues = Issues()
                issue.error = json["error"] as! Int
                issue.success = json["success"]
                // and so on...
            }
    }
    

    使用它作为你的类:

    //
    //  Issues.swift
    //
    import Foundation
    
    class Issues:NSObject
    {
        var success:String?
        var error:Int?
        var resultId:Int?
    }
    

    【讨论】:

      【解决方案2】:

      您需要针对您的特定模型进行调整,但这是我解析 JSON 时通常采用的过程。

      型号:

      class Category : NSObject {
      
          // Model Objects
          var categoryId: NSNumber!
          var categoryDesc: String!
          var inAppId: String!
          var categoryUnlocked: NSNumber!
      
          override init() {
              self.categoryId         = 0
              self.categoryDesc       = ""
              self.inAppId            = ""
              self.categoryUnlocked   = 0
          }
      
          convenience init(categoryDictionary: [String : AnyObject]) {
              self.init()
      
              self.categoryId         = NSNumber(int: categoryDictionary["CategoryID"]!.intValue)
              self.categoryDesc       = categoryDictionary["Category_Desc"] as? String ?? ""
              self.inAppId            = categoryDictionary["InAppID"] as? String ?? ""
              self.categoryUnlocked   = categoryDictionary["CategoryUnlocked"] as? NSNumber ?? 0
          }
      }
      

      对于 JSON,我使用 array.map 函数:

      var categoryList = [Category]()
      if let catArray = data["categories"] as? NSArray {
            categoryList = catArray.map({Category(categoryDictionary: $0 as! [String : AnyObject])})
            CoreDataService.instance.saveCategories(categoryList)
      }
      

      这种方式对于未来的开发人员来说是整洁易读的,并且在特定模型中易于管理。

      【讨论】:

        猜你喜欢
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        • 2019-09-09
        • 1970-01-01
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多