无法在swift 3中解析Json?

这里我试图解析来自本地服务器的数据,但无法解析它,它返回的是空数据,下面是我的模型类,从中我传递给表视图的数据,任何人都可以帮助我实现它?无法在swift 3中解析Json?

在这里,我曾附我的图像下面的JSON格式:

代码:

var homePageModel = [HomeBanner]() 

func HomeBannerDownloadJsonWithURL(){

let url = URL(string: homePageUrl)!

let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

if error != nil { print(error!); return }

do {

if let jsonObj = try JSONSerialization.jsonObject(with: data!) as? [[String:Any]] {

for item in jsonObj {

print(item)

for dict in item {

print(dict)

let dict = HomeBanner(json: item)

self.homePageModel.append(dict!)

print(self.homePageModel)

}

}

print(self.homePageModel)

DispatchQueue.main.async {

self.homeTableView.delegate = self

self.homeTableView.dataSource = self

self.homeTableView.reloadData()

}

}

} catch {

print(error)

}

}

task.resume()

}

struct HomeBanner {

let title : String?

let titleInArabic : String?

let showTitle : String?

var banner = [ChildrenBanners]()

init?(json : [String:Any]) {

if let customAttribute = json["childran_banners"] as? [[String: AnyObject]] {

var result = [ChildrenBanners]()

for obj in customAttribute {

result.append(ChildrenBanners(json: obj as! [String : String])!)

}

self.banner = result

} else {

self.banner = [ChildrenBanners]()

}

self.title = json["title"] as? String ?? ""

print(self.title)

self.titleInArabic = json["title_in_arabic"] as? String ?? ""

self.showTitle = json["show_title"] as? String ?? ""

}

}

struct ChildrenBanners {

let bannerId : String?

let name : String?

let status : String?

let sliderId : String?

let desktopImage : String?

let mobileImage : String?

let imageAlt : String?

let sortOrder : String?

let startTime : String?

let endTime : String?

init?(json : [String:Any]) {

self.bannerId = json["banner_id"] as? String ?? ""

print(self.bannerId)

self.name = json["name"] as? String ?? ""

self.status = json["status"] as? String ?? ""

self.sliderId = json["slider_id"] as? String ?? ""

self.desktopImage = json["desktop_image"] as? String ?? ""

self.mobileImage = json["mobile_image"] as? String ?? ""

self.imageAlt = json["image_alt"] as? String ?? ""

self.sortOrder = json["sort_order"] as? String ?? ""

self.startTime = json["start_time"] as? String ?? ""

self.endTime = json["end_time"] as? String ?? ""

}

}

回答:

JSON的根是数组,然后第二级是字典连键list1list2等你在你的代码中缺少这个。应该是这样的(我没有编译它)。

if let data = data, let jsonObj = try JSONSerialization.jsonObject(with: data) as? [[String:[String:Any]]] { 

for item in jsonObj {

for (_, dict) in item {

if let obj = HomeBanner(json: dict) {

self.homePageModel.append(obj)

}

}

}

}

还有很多其他的问题,在你的代码。像力量解包可选。在范围内再次使用相同的参数。例如。

for dict in item {        

let dict = HomeBanner(json: item)

// ....

}

就像你正在使用dict它隐藏外dict的范围,则不应该使用相同的名称PARAM。

回答:

刚刚尝试的代码

  if let jsonObj = try JSONSerialization.jsonObject(with: data!) as? [[String:Any]] { 

self.homePageModel = jsonObj.map{HomeBanner(json: $0)}

print(self.homePageModel)

DispatchQueue.main.async {

self.homeTableView.delegate = self

self.homeTableView.dataSource = self

self.homeTableView.reloadData()

}

}

} catch {

print(error)

}

这些线并没有使可选初始化为HomeBannerChildrenBanners只使用init(json : [String : Any]){}两种结构

以上是 无法在swift 3中解析Json? 的全部内容, 来源链接: utcz.com/qa/261061.html

回到顶部