Не в состоянии разобрать ответ API - PullRequest
0 голосов
/ 28 марта 2019

У меня есть ответ 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 голосов
/ 28 марта 2019

Вот код, который я пытался проанализировать ваши данные

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...