我如何在swift中将JSON解组为一个类?

时间:2014-10-21 14:55:31

标签: json swift

如何将JSON解组到swift类?这是Go code,它说明了我的目标。

我无法找到任何显示如何在Swift中执行此操作的参考。我查看(以及其他)的参考是tutorial

但这些例子使用词典。我想使用对象。

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

但该帖子并没有解组。

3 个答案:

答案 0 :(得分:4)

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

  

为了支持映射,类只需要实现MapperProtocol。 ObjectMapper使用“< =”运算符来定义每个成员变量如何映射到JSON和从JSON映射。

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>())
  }
}

虽然不像Gson for Java那样不引人注目,但它相当轻巧和明确。虽然它处于测试阶段,但我们很乐意在内部使用它。

答案 1 :(得分:3)

如今,您使用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的答案,早于{8}的早期版本的Swift。

答案 2 :(得分:1)

我希望以下链接对“Object Mapper”

的使用有所帮助
https://github.com/Hearst-DD/ObjectMapper