Как бы я прочитал JSON данных в массиве, используя Swifty JSON? - PullRequest
1 голос
/ 06 апреля 2020

Я только что познакомился с использованием JSON данных в моем приложении iOS. Я использовал сервис для анализа JSON данных с веб-сайта, и я хотел бы декодировать эти данные для отображения моему пользователю в UITableView. Мои JSON данные выглядят следующим образом:

{
  "success": true,
  "outputScenario": "Default",
  "data": {
    "collection": [
      {
        "teamName": "Gulf Coast Monarchs, FL",
        "teamW": "10",
        "teamL": "0",
        "teamT": "0",
        "teamPct": "1.000",
        "teamGB": "-",
        "teamGP": "10",
        "teamRA": "10",
        "teamDivision": "10-0-0"
      },
      {
        "teamName": "Ohio Nationals, OH",
        "teamW": "9",
        "teamL": "1",
        "teamT": "0",
        "teamPct": ".900",
        "teamGB": "1.0",
        "teamGP": "10",
        "teamRA": "20",
        "teamDivision": "9-1-0"
      },      {
        "teamName": "Mount Kisco Chiefs, NY",
        "teamW": "0",
        "teamL": "8",
        "teamT": "0",
        "teamPct": ".000",
        "teamGB": "8.0",
        "teamGP": "8",
        "teamRA": "108",
        "teamDivision": "0-8-0"
      }
      {
        "teamName": "Mount Kisco Chiefs, NY",
        "teamW": "0",
        "teamL": "8",
        "teamT": "0",
        "teamPct": ".000",
        "teamGB": "8.0",
        "teamGP": "8",
        "teamRA": "108",
        "teamDivision": "0-8-0"
      }
    ]
  },

Просто имейте в виду, что я вырезал значительный объем данных, представленных в JSON, чтобы их можно было легко просмотреть.

Я хотел бы декодировать эти данные, используя Swifty JSON, если это возможно, чтобы я мог отобразить их своему пользователю в UITableView. На данный момент UITableView будет отображать team name в UITableView.textLabel.text и teamW и teamL в UITableView.detailTextLabel.text. Как бы я расшифровал эти данные, используя Swifty JSON? Я изо всех сил пытаюсь выяснить, как этот тип структуры будет декодирован. Я хотел бы использовать модель, которую я создал:

struct Standing: Decodable {

var teamName: String
var teamW: Int
var teamL: Int
var teamT: Int
var teamPct: Int
teamGB: Int
teamGP: Int
teamRA: Int
teamDivision: String

}

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Почему вы хотите использовать SwiftyJSON, так как вы уже приняли Decodable?

Типы в вашей структуре часто ошибочны, потому что все значения String. И вам нужно две другие структуры для родительских объектов.

struct Root: Decodable {
    let success : Bool
    let outputScenario : String
    let data : TeamData
}

struct TeamData: Decodable {
    let collection : [Standing]
}

struct Standing: Decodable {
    let teamName, teamW, teamL, teamT: String
    let teamPct, teamGB, teamGP, teamRA: String
    let teamDivision: String
}

Расшифруйте данные, массив Standing находится в переменной standings.

do {
    let result = try JSONDecoder().decode(Root.self, from: data)
    let standings = result.data.collection
} catch {
    print(error)
}
1 голос
/ 06 апреля 2020

Если вы используете Decodable, вам вообще не нужно использовать SwiftyJSON, все встроено в сам Swift.

Используйте это как структуру вашей модели:

struct Standing: Codable {
    let success: Bool
    let outputScenario: String
    let data: DataClass
}

struct DataClass: Codable {
    let collection: [Collection]
}

struct Collection: Codable {
    let teamName, teamW, teamL, teamT: String
    let teamPct, teamGB, teamGP, teamRA: String
    let teamDivision: String
}

и разобрать это так:

do {
  let standing = try JSONDecoder().decode(Standing.self, from: data)
} catch {
  print(error)
}
...