【问题标题】:How would I unmarshal JSON to a class in swift?我如何将 JSON 快速解组为一个类?
【发布时间】:2014-10-21 14:55:30
【问题描述】:

如何将 JSON 解组到 swift 类中?这是Go code,它说明了我所追求的。

我找不到任何说明如何在 Swift 中执行此操作的参考。我查看的参考资料(除其他外)是 tutorial

但是这些示例使用字典。我想使用对象。

我看到了围绕这个 la 的尝试:http://bit.ly/1t3W2Gi

但该帖子不会解组到班级。

【问题讨论】:

    标签: json swift


    【解决方案1】:

    我们编写了一个开源的、基于协议的 Swift 框架,名为ObjectMapper,您可能想考虑一下。来自自述文件:

    为了支持映射,一个类只需要实现 MapperProtocol。 ObjectMapper 使用“

    class User: MapperProtocol {
    
      var username: String?
      var age: Int?
      var weight: Double?
      var arr: [AnyObject]?
      var dict: [String : AnyObject] = [:]
      var friend: User?
      var birthday: NSDate?
    
      // MapperProtocol    
      class func map(mapper: Mapper, object: User) {
        object.username <= mapper["username"]
        object.age <= mapper["age"]
        object.weight <= mapper["weight"]
        object.arr <= mapper["arr"]
        object.dict <= mapper["dict"]
        object.friend <= mapper["friend"]
        object.birthday <= (mapper["birthday"], DateTransform<NSDate, Int>())
      }
    }
    

    虽然不像 Java 的 Gson 那样不显眼,但它相当轻量级和明确。虽然它处于测试阶段,但我们很乐意在内部使用它。

    【讨论】:

    • 我正在使用它,它真的很棒。但是...我需要能够将模型发送回服务器,即使模型具有作为属性的数组或字典以及其他可映射属性,但它们是空的...所以在 json 中,这种属性将显示为例如:“图像”:{}。如果这个数组是 int 数组或其他简单类型,那么它应该被发送为空,但如果它是另一个自定义可映射类型的数组,如果其中没有项目,它只是不包含在最终 JSON 中。
    • 你能把它作为一个问题提交到 Github 上吗?我们来看看。
    【解决方案2】:

    现在,您可以使用 Codable 类型和 JSONDecoder 来执行此操作。

    struct Animal: Codable {
        let type: String
        let sound: String
        let legs: Int
    }
    
    let json = """
        [{"type": "dog", "sound": "woof", "legs": 4},
        {"type": "cat", "sound": "meow", "legs": 4},
        {"type": "snake", "sound": "hiss", "legs": 0}]
        """
    
    let data = json.data(using: .utf8)!
    
    do {
        let animals = try JSONDecoder().decode([Animal].self, from: data)
        print(animals)
    } catch {
        print("json failed: \(error)")
    }
    

    有关详细信息,请参阅:


    以上内容适用于 Swift 3 及更高版本。请参阅此答案的previous revision,早于JSONDecoder 获取早期版本的Swift。

    【讨论】:

      【解决方案3】:

      希望以下链接对“Object Mapper”的使用有所帮助

      [https://github.com/Hearst-DD/ObjectMapper][1]
      

      【讨论】:

      • 您可能错过了,但 Nathan 的回答(更详细)已经与此相关。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多