如何将JSON解组到swift类?这是Go code,它说明了我的目标。
我无法找到任何显示如何在Swift中执行此操作的参考。我查看(以及其他)的参考是tutorial。
但这些例子使用词典。我想使用对象。
我看到了围绕这个问题的尝试:http://bit.ly/1t3W2Gi
但该帖子并没有解组。
答案 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