Я сгенерировал Codable
протокол из ЗДЕСЬ и он будет выглядеть так:
struct Root: Codable {
let status: Bool
let statusCode: Int
let data: [Datum]
enum CodingKeys: String, CodingKey {
case status
case statusCode = "status_code"
case data
}
}
struct Datum: Codable {
let catID, catName, catParentid, name: String
let year: String
let fullname: Fullname
let address: Address
let ship: Ship
enum CodingKeys: String, CodingKey {
case catID = "cat_id"
case catName = "cat_name"
case catParentid = "cat_parentid"
case name, year, fullname, address, ship
}
}
struct Address: Codable {
let city, state: String
}
struct Fullname: Codable {
let firstname, lastname: String
}
struct Ship: Codable {
let captian, time: String
}
Теперь я проверил его на игровой площадке с вашим JSON
, который выглядит ниже:
let jsonData = """
{
"status": true,
"status_code": 1,
"data": [
{
"cat_id": "1",
"cat_name": "Food",
"cat_parentid": "2",
"name": "guru",
"year": "3000",
"fullname": {
"firstname": "jio",
"lastname": "jack"
},
"address": {
"city": "sanfrancisco",
"state": "california"
},
"ship": {
"captian": "mojo",
"time": "12.30.01"
}
}
]
}
""".data(using: .utf8)!
И вы можете проанализировать его следующим образом:
let root = try? JSONDecoder().decode(Root.self, from: jsonData)
Теперь вы можете получить массив данных из root
объекта с
let content = root?.data //here your crash will resolve
content
это тип [Datum]