我有一个JSON格式的API响应,如下所示:
item_id
我知道如何在上面的结果中解析user_id
,liked_user
和其他人的结果。但是如何在上面的响应中获取class Item : NSObject {
var itemtId :Int
var userId : Int
var luckyNumber : Int
var itemCreatedAt : String
init?(dict: [String :JSON]) {
self.itemId = dict["item_id"]?.int ?? 0
self.userId = dict["user_id"]?.int ?? 0
self.luckyNumber = dict["lucky_number"]?.int ?? 0
self.itemCreatedAt = dict["modified_time"]?.string ?? ""
}
}
的结果,这是一个数组?
现在我的NSObject类看起来像这样:
var items = [Item]()
My ApiCall success .... {
let json = JSON(result) // this is SwiftyJson
guard let itemArr = json["item"].array else{
return
}
for item in itemArr {
if let item = item.dictionary,let feed = Item.init(dict: item){
self.items.append(feed)
}
}
然后在我进行API调用之后,我会像这样解析对这个类的响应:
liked_user
所以我的问题是,在这种情况下,我如何解析Item
中的数据并将其存储在我的var email = nodemailer.createTransport("STMP", {
service: "Sendgrid",
auth: {
user: "username",
pass: "pass"
}
})
类中?
答案 0 :(得分:3)
使用您给定的代码,解决方案是在类
中创建数组likedUserIDs
class Item : NSObject {
var itemtId :Int
var userId : Int
var luckyNumber : Int
var itemCreatedAt : String
var likedUserIDs = [Int]()
init?(dict: [String :JSON]) {
self.itemId = dict["item_id"]?.int ?? 0
self.userId = dict["user_id"]?.int ?? 0
self.luckyNumber = dict["lucky_number"]?.int ?? 0
self.itemCreatedAt = dict["modified_time"]?.string ?? ""
if let likedUsers = dict["liked_user"]?.array {
for likedUser in likedUsers {
likedUserIDs.append(likedUser["user_id"].intValue)
}
}
}
}
但是在Swift 4中,我建议使用(De)Codable
协议并使用结构来解析JSON。
SwiftyJSON
不再需要了。
struct Root : Decodable {
let item : [Item]
}
struct Item : Decodable {
let itemId :Int
let userId : Int
let luckyNumber : Int
let itemCreatedAt : String
let likedUsers : [LikedUser]
private enum CodingKeys : String, CodingKey {
case itemId = "item_id"
case userId = "user_id"
case luckyNumber = "lucky_number"
case itemCreatedAt = "modified_time"
case likedUsers = "liked_user"
}
struct LikedUser : Decodable {
let userID : Int
private enum CodingKeys : String, CodingKey { case userID = "user_id" }
}
}
解码它将原始JSON传递为Data
对象
do {
let result = try decoder.decode(Root.self, from: data)
print(result)
} catch {
print("error: ", error)
}
答案 1 :(得分:0)
我认为liked_user
的结果是一个包含两个Json
对象的数组。
下面的代码块将对您有所帮助。
let liked_users = json["liked_user"].array
for liked_user in liked_users {
let user_id = liked_user["user_id"].int
}
您可以将user_id保存到Item
类中的数组中。
class Item : NSObject {
var itemId :Int
var userId : Int
var luckyNumber : Int
var itemCreatedAt : String
var useridArray: [Int] = []
init?(dict: [String :JSON]) {
self.itemId = dict["item_id"]?.int ?? 0
self.userId = dict["user_id"]?.int ?? 0
self.luckyNumber = dict["lucky_number"]?.int ?? 0
self.itemCreatedAt = dict["modified_time"]?.string ?? ""
if let liked_users = dict["liked_user"]?.array {
for liked_user in liked_users {
if let userid = liked_user["user_id"]?.int {
useridArray.append(userid)
}
}
}
}
}
答案 2 :(得分:0)
在Item对象中创建一个likesUsersArray var,然后以这种方式解析字典数组:
class Item : NSObject {
var itemtId :Int
var userId : Int
var luckyNumber : Int
var itemCreatedAt : String
var likedUsersArray: [Int] = []
init?(dict: [String :JSON]) {
self.itemId = dict["item_id"]?.int ?? 0
self.userId = dict["user_id"]?.int ?? 0
self.luckyNumber = dict["lucky_number"]?.int ?? 0
self.itemCreatedAt = dict["modified_time"]?.string ?? ""
for likedUserDict in dict["liked_user"]?.array {
if let dict = likedUserDict?.dictionary, let likedUserId = dict["user_id"].int {
self.likedUsersArray.append(likedUserId)
}
}
}
}