快速解析 Json 数据

Posted

技术标签:

【中文标题】快速解析 Json 数据【英文标题】:Json data parse in swift 【发布时间】:2017-08-07 11:28:51 【问题描述】:

我是 swift 代码的新手

这是我解析后的json,我必须在tableview上显示, 我可以正确获取日期、详细信息、eventid,但无法获取横幅图片中的“eventImage”,我可以尝试但没有得到,请帮助我 这是我的代码 json调用函数

if errorCode == "0" 


                            if let Media_list = jsonData["events"] as? NSArray 


                                for i in 0 ..< Media_list.count 

                                    if let MediaEventData = Media_list[i] as? NSDictionary 




       =====>>     Hear the problem    let imageURL = self.url+"/images/" + String(describing: MediaEventData["bannerImage"]!)

                                            self.Mediainfo.append(MediaEvent(
                                            eventId: MediaEventData["eventId"]as?String,
                                            date: MediaEventData["date"]as?String,
                                            eventname: MediaEventData["eventName"]as?String,
                                            bannerImages: imageURL


                                           )
                                        )
                                    

                                
                                self.do_table_refresh()
                            

我的 tablview 代码

  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCell(withIdentifier: "Media", for: indexPath)as! MediaCustomTableViewCell

       let  row = indexPath.row


        let media = Mediainfo[row] as MediaEvent

        cell.DisplayDate.text = media.date

        cell.DisplayName.text = media.eventName


         cell.DisplayImage.image = UIImage(named: "profile_pic")
         cell.DisplayImage.downloadImageFrom(link: media.bannerImages!, contentMode: .scaleAspectFit)


        // Configure the cell...

        return cell
    

怎样才能显示“banner image”tableview

【问题讨论】:

作为 Swift 新手,请先了解变量名以小写字母开头的命名约定,并使用 Swift 原生类型 ArrayDictionary 而不是无类型 NS... 基础类型。 我有多个图像的日期,我想显示 ex:2017 年 8 月 8 日有两个图像,但我想在 tableview 中显示当天的第一张图像我该怎么做 如果可以尝试下面的代码,它会显示当天的孔图像,请帮助我 【参考方案1】:

我认为问题在于您访问横幅图片的方式我认为应该是这样的

MediaEventData["eventImages"][i]["bannerImage"]

其中 i 是 eventImages 数组的索引

在您的代码中,您可以这样做:

 var imageUrl: String = ""
if let Media_list = jsonData["events"] as? [Any] 


    for i in 0 ..< Media_list.count 

        if let MediaEventData = Media_list[i] as? [String: Any] 

            let eventImages = MediaEventData["eventImages"] as! [[String: Any]]
                if eventImages.count > 0 
                   let bannerImage = eventImages[0]["bannerImage"] as? String

                   imageUrl = self.url+"/images/" + String(describing: bannerImage!)

                



            self.Mediainfo.append(MediaEvent(
                eventId: MediaEventData["eventId"]as?String,
                date: MediaEventData["date"]as?String,
                eventname: MediaEventData["eventName"]as?String,
                bannerImages: imageURL


                )
            )



            
            


【讨论】:

这段代码会导致很多'Any' has no subscript members错误。 我有多个图像的日期,我想显示 ex:2017 年 8 月 8 日有两个图像,但我想在 tableview 中显示当天的第一张图像我该怎么做 @naga 我更新了我的答案以显示第一张图片请检查,如果您有任何问题,请询问 @user1000 在收到此错误消息类型“任何”没有下标成员后,我尝试了上面的代码 我认为你需要向下转换为 Array ,我更新了我的答案,请检查【参考方案2】:

对我来说很好

 if errorCode == "0" 


                            if let Media_list = jsonData["events"] as? NSArray 

                                self.Mediainfo.removeAll()


                                for i in 0 ..< Media_list.count 

                                    if let MediaEventData = Media_list[i] as? NSDictionary 

                                        if let image_list = MediaEventData["eventImages"] as? NSArray
                                         

                                         for i in 0 ..< image_list.count
                                         

                                            if let mydata = image_list[i] as? NSDictionary

                                            
                                                let datavalue = mydata["bannerImage"]as? String
                                                self.imageurl = self.url+"/images/events/" + datavalue!

                                            self.Mediainfo.append(MediaEvent(
                                            eventId: MediaEventData["eventId"]as?String,
                                            date: MediaEventData["date"]as?String,
                                            eventname: MediaEventData["eventName"]as?String,
                                            bannerImages: self.imageurl
                                            ))

                                            

                                            
                                        
                                    


                                

【讨论】:

以上是关于快速解析 Json 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何快速解析这个 JSON 数据

教你不编程快速解析 JSON 数据

解析 JSON 文件(本地存储),从而快速创建对象数组

快速解析 Json

如何高效快速地解析大量行格式json文件

快速解析双 JSON 编码数组并访问它