【发布时间】:2014-10-21 14:55:30
【问题描述】:
如何将 JSON 解组到 swift 类中?这是Go code,它说明了我所追求的。
我找不到任何说明如何在 Swift 中执行此操作的参考。我查看的参考资料(除其他外)是 tutorial。
但是这些示例使用字典。我想使用对象。
我看到了围绕这个 la 的尝试:http://bit.ly/1t3W2Gi
但该帖子不会解组到班级。
【问题讨论】:
如何将 JSON 解组到 swift 类中?这是Go code,它说明了我所追求的。
我找不到任何说明如何在 Swift 中执行此操作的参考。我查看的参考资料(除其他外)是 tutorial。
但是这些示例使用字典。我想使用对象。
我看到了围绕这个 la 的尝试:http://bit.ly/1t3W2Gi
但该帖子不会解组到班级。
【问题讨论】:
我们编写了一个开源的、基于协议的 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 那样不显眼,但它相当轻量级和明确。虽然它处于测试阶段,但我们很乐意在内部使用它。
【讨论】:
现在,您可以使用 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。
【讨论】:
希望以下链接对“Object Mapper”的使用有所帮助
[https://github.com/Hearst-DD/ObjectMapper][1]
【讨论】: