无法解析api响应

时间:2019-03-28 11:21:12

标签: ios json swift

我有一个看起来像这样的api响应…我正确地从api得到了响应。

{
    "status": "success",
    "data": {
        "meta": {
            "url": "htt..://www.abc.com",
            "title": “ASD - Log In or Sign Up",
            "description": "Create an account or log in….”,
            "display_url": "htt..://www.abc.com/",
            "video_url": "",
            "image": "htt..://www.asd.com/images/asds_325x325.png",
            "img_wxh": "325x325"
        }
    }
}

我用来解析这些数据的模型类是这样给出的。

struct MetaData: Codable {
  let status: String?
  let data: DataClass?
}

struct DataClass: Codable {
  let meta: Meta
}

struct Meta: Codable {
  let url: String
  let title, description: String
  let displayURL: String
  let videoURL: String
  let image: String
  let imgWxh: String

  enum CodingKeys: String, CodingKey {
    case url = "url"
    case title = "title"
    case description = "description"
    case displayURL = "display_url"
    case videoURL = "video_url"
    case image = "image"
    case imgWxh = "img_wxh"
  }
}

正在进行的api调用如下所示...

 WebServiceClient.shared.getMeta(withParameters: parameters) { [weak self] (isSuccess, result) in
      guard let `self` = self else { return }
      if isSuccess, result != nil {


        if let jsonData = try? JSONSerialization.data(withJSONObject: result as Any, options: []) {
          do {
            let metaData = try JSONDecoder().decode(MetaData.self, from: jsonData)


            self.metaDataImageView.sd_setImage(with: URL(string: metaData.data?.meta.image ?? ""), completed: nil)
            self.urlLabel.text = metaData.data?.meta.url
            self.titleLabel.text = metaData.data?.meta.title
            self.urlDescriptionLabel.text = metaData.data?.meta.description

          } catch {
            print("error \(error)")
          }
        }
      }

但是我得到的所有数据都为零...可能是什么原因..?

metaData中我什么也没得到...

enter image description here

1 个答案:

答案 0 :(得分:0)

这是我尝试解析您的数据的代码

struct MetaData: Codable {
    let status: String?
    let data: DataClass?
}

struct DataClass: Codable {
    let meta: Meta
}

struct Meta: Codable {
    let url: String
    let title, description: String
    let displayURL: String
    let videoURL: String
    let image: String
    let imgWxh: String

    enum CodingKeys: String, CodingKey {
        case url = "url"
        case title = "title"
        case description = "description"
        case displayURL = "display_url"
        case videoURL = "video_url"
        case image = "image"
        case imgWxh = "img_wxh"
    }
}

let jsonString = """
{
"status": "success",
"data": {
"meta": {
"url": "htt..://www.abc.com",
"title": "ASD - Log In or Sign Up ",
"description": "Create an account or log in….",
"display_url": "htt..://www.abc.com/",
"video_url": "",
"image": "htt..://www.asd.com/images/asds_325x325.png",
"img_wxh": "325x325"
}
}
}
"""

let jsonData = jsonString.data(using: .utf8)
do {
    let parsedData = try JSONDecoder().decode(MetaData.self, from: jsonData!)
    print(parsedData)

} catch {
    print(error.localizedDescription)
}

它有效。

enter image description here

您的json也有问题,因此请确保您验证json格式。 您可以使用jsonlint.com来验证json。