使用没有循环的 swiftyjson 解析 JSON
Parse JSON using swiftyjson without loop
我正在尝试使用 SwiftyJSON 解析 JSON。我已经能够成功地完成我需要的一切,但我认为有更好的方法可以使代码更清晰、更快速地使用平面图之类的东西。
现在我在 API 调用后得到 JSON 数据。我正在使用此代码解析 JSON 数据并将其放入自定义 class 的数组中,联系方式。自定义 class "Contact" 中有一堆字符串,例如 "firstName," "lastName," 和 "phoneNumber".
这是调用的样子以及用于解析完成处理程序中的 JSON 的循环。有没有更好的方法使用平面图或其他东西来做到这一点?
Alamofire.request(url, method: .get).responseJSON{ response in
switch response.result {
case .success(let value):
let swiftyJsonVar = JSON(response.result.value!)
let totalResponseArray = swiftyJsonVar.arrayValue
var allTheContacts = [Contact]()
for contact in 0 ..< totalResponseArray.count{
let itterateArray = totalResponseArray[contact] //singleRetailer
let contactToAppend = Contact()
contactToAppend.firstName = itterateArray["firstName"].stringValue
contactToAppend.lastName = itterateArray["lastName"].stringValue
contactToAppend.phoneNumber = itterateArray["phone"].stringValue
allTheContacts.append(contactToAppend)
}
}
}
使用这个地图功能
var allTheContacts = totalResponseArray.map { (obj) -> Contact in
let contactToAppend = Contact()
contactToAppend.firstName = obj["firstName"].stringValue
contactToAppend.lastName = obj["lastName"].stringValue
contactToAppend.phoneNumber = obj["phone"].stringValue
return contactToAppend
}
您几乎无法使用映射或循环函数。没有比这更简单的方法了。如果您尝试清理代码,要记住的一件事是 swift JSON 数组中的对象是 JSON 对象。因此,我尝试在代码中做的一件事是将 JSON 的解析抽象为它所属的 class 的初始化函数。
class Contact {
var firstName: String
var lastName: String
var phoneNumber: String
init(json: JSON) {
contactToAppend.firstName = obj["firstName"].stringValue
contactToAppend.lastName = obj["lastName"].stringValue
contactToAppend.phoneNumber = obj["phone"].stringValue
}
}
有了这样的东西,你可以定义你的循环更简单,或者你可以使用一个简单的地图。
var allTheContacts = totalResponseArray.map { (obj) -> Contact in
return contact(json: obj)
}
或循环版本
var allTheContacts = [Contact]()
for contact in totalResponseArray {
allTheContacts.append(Contact(json: contact))
}
我正在尝试使用 SwiftyJSON 解析 JSON。我已经能够成功地完成我需要的一切,但我认为有更好的方法可以使代码更清晰、更快速地使用平面图之类的东西。
现在我在 API 调用后得到 JSON 数据。我正在使用此代码解析 JSON 数据并将其放入自定义 class 的数组中,联系方式。自定义 class "Contact" 中有一堆字符串,例如 "firstName," "lastName," 和 "phoneNumber".
这是调用的样子以及用于解析完成处理程序中的 JSON 的循环。有没有更好的方法使用平面图或其他东西来做到这一点?
Alamofire.request(url, method: .get).responseJSON{ response in
switch response.result {
case .success(let value):
let swiftyJsonVar = JSON(response.result.value!)
let totalResponseArray = swiftyJsonVar.arrayValue
var allTheContacts = [Contact]()
for contact in 0 ..< totalResponseArray.count{
let itterateArray = totalResponseArray[contact] //singleRetailer
let contactToAppend = Contact()
contactToAppend.firstName = itterateArray["firstName"].stringValue
contactToAppend.lastName = itterateArray["lastName"].stringValue
contactToAppend.phoneNumber = itterateArray["phone"].stringValue
allTheContacts.append(contactToAppend)
}
}
}
使用这个地图功能
var allTheContacts = totalResponseArray.map { (obj) -> Contact in
let contactToAppend = Contact()
contactToAppend.firstName = obj["firstName"].stringValue
contactToAppend.lastName = obj["lastName"].stringValue
contactToAppend.phoneNumber = obj["phone"].stringValue
return contactToAppend
}
您几乎无法使用映射或循环函数。没有比这更简单的方法了。如果您尝试清理代码,要记住的一件事是 swift JSON 数组中的对象是 JSON 对象。因此,我尝试在代码中做的一件事是将 JSON 的解析抽象为它所属的 class 的初始化函数。
class Contact {
var firstName: String
var lastName: String
var phoneNumber: String
init(json: JSON) {
contactToAppend.firstName = obj["firstName"].stringValue
contactToAppend.lastName = obj["lastName"].stringValue
contactToAppend.phoneNumber = obj["phone"].stringValue
}
}
有了这样的东西,你可以定义你的循环更简单,或者你可以使用一个简单的地图。
var allTheContacts = totalResponseArray.map { (obj) -> Contact in
return contact(json: obj)
}
或循环版本
var allTheContacts = [Contact]()
for contact in totalResponseArray {
allTheContacts.append(Contact(json: contact))
}