首页 > 解决方案 > 使用 Codable 从 JSON 解析嵌套数据

问题描述

我正在尝试从 JSON 响应中解析嵌套数据,但没有成功。以下是我到目前为止尝试过的内容以及尝试解析的 json 响应。

// JSON

 {
"statusCode": 200,
"success": true,
"data": {
    "tDetail": [
        {
            "roleId": null,
            "id": 34,
            "userId": 126,
            "catId": null,
            "importId": null,
            "name": "My task from postman",
            "myday": 1,
            "important": 0,
            "completed": 0,
            "dateCreated": "2020-02-10T09:05:04.000Z",
            "dateModified": "2020-02-10T09:05:04.000Z"
        }
    ],
    "steps": [],
    "files": [],
}
}

// 结构体

struct MyDayAndTaskDetails: Codable
{
let data : [MyTaskDetail]
}

struct MyTaskDetail : Codable {
let roleId, taskId, userId, catId, important, completed, recurring, myday : Int?
let repeatType, name, duedate, reminder, frequency, weekdays, notes, baseurl : String?
let steps : [Steps]
let files : [Files]

private enum CodingKeys: String, CodingKey {
       case taskId = "id"
       case userId = "userId"
    case roleId = "roleId"
    case catId = "catId"
    case myday = "myday"
       case name = "name"
       case notes = "notes"
       case duedate = "duedate"
       case reminder = "reminder"
       case recurring = "recurring"
       case repeatType = "repeatType"
       case important = "important"
       case completed = "completed"
    case frequency = "frequency"
    case weekdays = "weekdays"
    case baseurl = "baseurl"
    case steps = "Steps"
    case files = "Files"

   }
}

struct Steps : Codable {
let stepName : String?
let status, stepId : Int?

private enum CodingKeys: String, CodingKey {
       case stepName = "stepName"
       case status = "status"
       case stepId = "stepId"
   }
}

struct Files : Codable {
let fileName : String?

private enum CodingKeys: String, CodingKey {
       case fileName = "fileName"
   }
}

标签: jsonswiftstructcodabledecodable

解决方案


你错过了一级

struct MyDayAndTaskDetails: Codable {
    let data : Detail       
}

struct Detail: Codable {
     let tDetail: [MyTaskDetail]
     let steps : [Steps]
     let files : [Files]
}

等等


推荐阅读