【问题标题】:download Image and save it json using SwiftyJSON使用 SwiftyJSON 下载图像并将其保存为 json
【发布时间】:2018-06-07 09:38:56
【问题描述】:

我有以下格式的 json,我从服务器获取并使用 SwiftyJSON 进行解析。

{
name: "Ganesh"
imageURL:"www.abc.com/image.png"
}

我正在使用以下代码下载图片:

do{
     let myData = try Data(contentsOf: url)
}catch{
     Print("error")
}

注意:“url”包含从 json 转换为 URL 的 url

我想用不同的密钥将这个“myData”保存在上面的同一个 json 中,并在以后访问。

我正在尝试使用 SwiftyJSON 方法将 myData 保存在 json 中:

responseJSON["image"] = try JSON(data: myData)

我收到的错误: "如果在将数据转换为 json 时出错 数据无法读取,因为它的格式不正确。"

我没有得到什么问题? 图片出现在该网址上。如果我将 myData 转换为 UIImage 并在 UIImageView 上分配它,我可以看到它。

【问题讨论】:

  • 我猜JSON(data:) 等待代表 JSON Stringified 的 Data 对象。这不是你的情况。我猜你想做stackoverflow.com/questions/39075043/…?另外,Data(contentsOf:) 是同步的,在会阻塞你的 UI 的主线程中,使用URLSession,或者第三个库:SDWebImage、KingFisher、erc。

标签: ios swift swifty-json


【解决方案1】:

如果您想以 JSON 格式保存图像,最好的方法是将Data 转换为 Base64 字符串

if let base64encodedString =  myData.base64EncodedString(){
    responseJSON["image"] = base64encodedString
}

要恢复图像,试试这个

guard let base64encodedString = responseJSON["image"] as? String else { return }
guard let imageData = Data(base64Encoded: base64encodedString) else { return }
let image = UIImage(data: imageData)

虽然 Base64 编码的图像比原始数据占用大约 33% 的空间,但它们是 Web 和数据库安全的 - base64 字符串既不包含控制字符,也不包含引号,并且可以作为 URL 查询字符串中的参数传输。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多