0

好的,所以我被困在用这个模型解码这个特定 json 的最后一项,“有效载荷”总是为零,在这个“有效载荷”对象中,我可以制作自己的 json 结构,我能够解码“文本”但是当涉及到最后一项“有效负载”时,它不起作用并且始终为零。

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

我的模型课。

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"
      ]
    }
  }
]
}
}
4

1 回答 1

1

在 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]
}
于 2019-10-14T07:24:10.770 回答