如何将 JSON Image-String(不是 url)转换为 UIImage 以供查看

Posted

技术标签:

【中文标题】如何将 JSON Image-String(不是 url)转换为 UIImage 以供查看【英文标题】:How to convert a JSON Image-String (not url) to a UIImage for viewing 【发布时间】:2017-11-21 18:02:59 【问题描述】:

嘿,所以我已经尝试了一天来解决这个问题。所以我迫切地想要一个答案。我正在尝试做的实际上很简单,我有一个字符串形式的 JSON 图像数组(我认为)。它们不是 url,图像/字符串以 JSON 格式出现,例如“GoodLogo.png”,问题是来自 JSON 的通常图像以 url 格式出现。但这只是说 png & jpg

我返回的 JSON 代码:

(
    
    id = 1;
    logo = "scriptslogo.png";
    name = "scripts";
,
    
    id = 2;
    logo = "altrlogo.jpg";
    name = "Altr";
,
    
    id = 3;
    logo = "bostonlogo.jpeg";
    name = "boston";
,
)

我有一个变量,它是一个字符串数组。我把 JSON 数据放进去。

代码:

    var imageList = [String]()

    let string = "https://some.url/api"

    let url = NSURL(string: string)

    let request = NSMutableURLRequest(url: url! as URL)

    request.httpMethod = "GET"

    let session = URLSession.shared

    let tache = session.dataTask(with: request as URLRequest)  (data, response, error) -> Void in

        if let jsonObj = try? JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSArray 

            let logo = jsonObj.value(forKey: "logo") as? NSArray
            self.imageList = logo as! [String]


            DispatchQueue.main.async 
            self.imageTableView.reloadData()
            
        

    
    tache.resume()

然后我所做的就是尝试填充表格视图,但我在下面尝试过的每一种方式都会导致应用程序崩溃或不显示任何内容。

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    if tableView == imageTableView 

            cell = imageTableView.dequeueReusableCell(withIdentifier: "imageCell", for: indexPath) as! imageCell

            cell.cellImage.image = imageList[indexPath.row]


          // Iv'e tried this which I don't no if it even applies to what I'm trying to do 

          if let imageData = Data(base64Encoded: imageList[indexPath.row], options: .ignoreUnknownCharacters) 
          let image = UIImage(data: imageData)
          cell.cellImage.image = image
        


    
    return cell

【问题讨论】:

您正在尝试从图像的名称中检索图像。这是一个问题列表:long-problem-list.jpg 这样不行,即使用图片名称,必须有图片数据或者图片url。 好的,谢谢,这解释了为什么我不能让它工作 我在想图像数据在那个图像字符串中会是怎样的。然后我可以将其转换为图像。但我猜不是 【参考方案1】:

试试这个

let url = URL(string: "http://test.com/images/\(imageList[indexPath.row])")
let data = try? Data(contentsOf: url)

if let imageData = data 
    cell.cellImage.image = UIImage(data: data)

【讨论】:

以上是关于如何将 JSON Image-String(不是 url)转换为 UIImage 以供查看的主要内容,如果未能解决你的问题,请参考以下文章

如何将StructType从Spark中的json数据框分解为行而不是列

如何将视频文件作为 json 数据发送。 (不是文件名或路径,而是内容)到 Android

如何将 int32 类型转换为 int,因为它不是 JSON 可序列化的

Scrapy -- 从脚本调用scrapy时,如何立即将字典返回给进程,而不是导出到json文件

如何检查 json 是不是与结构/结构字段匹配

java中将map转成json时,如何将map中的整型数字在转成json后,变成字符串,而不是整型。