【问题标题】:how to do safe json parsing in swift?如何在swift中进行安全的json解析?
【发布时间】:2017-05-08 08:13:35
【问题描述】:

我从服务器获取图像的 Json,我创建了一个模态类,在该类下我已将图像声明为该类的成员。

class SomeClass: NSObject {

  var objImages:[Images] = [Images]()


}

图像类

class Images {

  var thumbImage:String = ""
  var fullImage:String = ""

    init(dictionary:NSDictionary){

      fullImage = dictionary["thumb"] as? String ?? ""
      thumbImage = dictionary["full_url"] as? String ?? ""
  }
  init() {

  }

}

解析 json 数据

 if let arrImg  = dictionary["images"] {

      for value in arrImg as! NSArray {
        let tempImage:Images = Images(dictionary: value as! NSDictionary)
        recipeImages.append(tempImage)
      }
    }

下面是josn的回复

   { "images": [
      {
        "thumb": "https://mysevrer.com/v0/b/a.png”,
        "full_url": "https://mysevrer.com/v0/b/b.png"
      },
      {
        "thumb": "https://mysevrer.com/v0/b/a.png”",
        "full_url": "https://mysevrer.com/v0/b/b.png”"
      }
    ]
}

请问这是解析响应的安全方式吗?

  • 如果我没有将图像作为数组获取怎么办
    如果我没有得到“拇指”怎么办 & "full" 作为键

【问题讨论】:

  • 如果您对服务器数据负责,您可以控制安全性。确保始终发送两个键/值对,然后您可以强制解包这些值。使用 Swift [String:String] 而不是类型未指定的 NSDictionary 来摆脱类型转换

标签: json swift nsarray nsdictionary


【解决方案1】:

我不确定这是否是您的意思,但这将返回一个可选的图像实例。因此,如果字典不包含其中一个或两个键,它将返回 nil。

class Images {

    var thumbImage:String

    var fullImage:String

    init?(dictionary:Dictionary<String,String>){

        guard let image = dictionary["thumb"] else { return nil }

        guard let thumb = dictionary["full_url"] else { return nil }

        self.fullImage = image

        self.thumbImage = thumb
    }
}

对于数组的解析部分。

guard let imagesArray = dictionary["images"] as? Array<Dictionary<String,String>> else { return }

for dict in imagesArray {

    guard let images = Images(dictionary: dict) else { continue }

    recipeImages.append(images)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    相关资源
    最近更新 更多