https://github.com/daltoniam/JSONJoy-Swift 例如:
JSON1 = {
"message": "Sorry! Password does not match.",
"code": "4"
}
JOSN2 = {
"data": {
"id": 21
},
"message": "Signup Successful.",
"code": "1"
},
这里json键“data”是可选的。那么我如何使用相同的模型对象来处理两个响应?
答案 0 :(得分:0)
JSONJoy原生地将未找到的元素设置为nil,你只需要声明它们是可选的,然后在使用之前检查nil。
来自文档
这也像大多数Swift JSON库一样具有自动可选验证。
//一些随机错误的密钥。这将工作正常和财产 只会是零。
firstName = decoder [5] [" wrongKey"] [" MoreWrong"]。string
// firstName是nil,但没有崩溃!
这是我的例子,我的说明。我有一个复杂的对象集,其中我的顶级对象(UserPrefs)具有辅助对象数组(SmartNetworkNotification和SmartNotificationTime)。
请注意,通知和时间都声明为可选。我做的是在尝试解析辅助对象数组后检查nil。没有nil检查,迭代解析列表的尝试失败,因为它为零。如果没有检查,只要它是空的,它就会移过它。
这对我有用,但尚未经过深度测试。因人而异!好奇其他人如何处理它。
struct UserPrefs: JSONJoy {
var notifications: [SmartNetworkNotification]?
var times: [SmartNotificationTime]?
init(_ decoder: JSONDecoder) throws {
// Extract notifications
let notificationsJson = try decoder["notifications"].array
if(notificationsJson != nil){
var collectNotifications = [SmartNetworkNotification]()
for notificationDecoder in notificationsJson! {
do {
try collectNotifications.append(SmartNetworkNotification(notificationDecoder))
} catch let error {
print("Error.. on notifications decoder")
print(error)
}
}
notifications = collectNotifications
}
// Extract time of day settings
let timesJson = try decoder["times"].array
if(timesJson != nil){
var collectTimes = [SmartNotificationTime]()
for timesDecoder in timesJson! {
do {
try collectTimes.append(SmartNotificationTime(timesDecoder))
} catch let error {
print("Error.. on timesJson decoder")
print(error)
}
}
times = collectTimes
}
}