如何将这个异构对象映射到swift中的模型?

How to map this heterogeneous object with the model in swift?

好吧,所以我坚持用这个模型解码这个特定 json 的最后一项,"payload" 总是 nil,在这个里面"payload" 对象我可以制作自己的 json 结构,我能够解码 "text" 但是当涉及到最后一项是 "payload" 它不工作并且始终为零。

我没有使用任何第三方库。

我的模型Class。

struct DailougeFlowModel : Decodable {
//    private enum CodingKeys : String, CodingKey {
//        case responseId = "responseId"
//        case queryResult = "queryResult"
//    }
let responseId : String?
let queryResult : QueryResult?
}

 struct QueryResult: Decodable {
 //    private enum CodingKeys : String, CodingKey {
 //        case fulfillmentText = "fulfillmentText"
 //        case fulfillmentMessages = "fulfillmentMessages"
 //    }
let fulfillmentText : String?
let fulfillmentMessages : [FulfillmentMessages]?

}

struct FulfillmentMessages: Decodable {
let text : TextModel?
let payLoad : Questions?
}

struct TextModel: Decodable {
let text : [String]?
}

struct Questions : Decodable{
let questions : [String]?
 }

这个 json 是我从 dailogeflow(V2) 得到的。我正在应用程序中集成聊天机器人。

{
"responseId": "2b879f78-cc05-4735-a7e8-067fdb53a81d-f6406966",
"queryResult": {
"fulfillmentMessages": [
  {
    "text": {
      "text": [
        "Text Here"
      ]
    }
  },
  {
    "text": {
      "text": [
        "Another Reply For Hi"
      ]
    }
  },
  {
    "payload": {
      "questions": [
        "Question One",
        "Question Two",
        "Question Three",
        "Question Four"
      ]
    }
  }
]
}
}

指定内部模型名称,因为它在 json 响应中,如果您想指定自己的模型名称,那么您需要像第一个模型一样在每个模型中设置一个枚举 'ResponseModel'

// MARK: - ResponseModel
struct ResponseModel: Codable {
    let responseID: String
    let queryResult: QueryResult

    enum CodingKeys: String, CodingKey {
        case responseID = "responseId"
        case queryResult
    }
}

// MARK: - QueryResult
struct QueryResult: Codable {
    let fulfillmentMessages: [FulfillmentMessage]
}

// MARK: - FulfillmentMessage
struct FulfillmentMessage: Codable {
    let text: Text?
    let payload: Payload?
}

// MARK: - Payload
struct Payload: Codable {
    let questions: [String]
}

// MARK: - Text
struct Text: Codable {
    let text: [String]
}