-2

我正在使用以下代码将数据从服务器解码为 json。但是当它解析成json时。它引发以下错误

无法读取数据,因为它的格式不正确。

struct ExpoDecode: Codable {

var success: Bool?
var count: Int?
var type: String?
var results: [Expo]?

enum CodingKeys: String, CodingKey {

    case success = "Success"
    case count = "Count"
    case type = "Type"
    case results = "Results"
}
}

struct ExpoAsset: Codable {

var assetId: String?
var asseturl: String?

enum CodingKeys: String, CodingKey {

    case assetId = "ExpoAssetId"
    case asseturl = "AsstetUrl"
}
}

struct Expo: Codable {

var id: String?
var name: String?
var location: String?
var timing: String?

var expoAssets: [ExpoAsset]?

enum CodingKeys: String, CodingKey {

    case id = "Expoid"
    case name = "Expotitle"
    case location = "Location"
    case ticketCost = "Ticketcost"
    case expoAssets = "ExpoAssets"
}

init(from decoder: Decoder) throws {

    let values = try decoder.container(keyedBy: CodingKeys.self)

    id = try values.decode(String.self, forKey: .id)
    name = try values.decode(String.self, forKey: .name)
    location = try values.decode(String.self, forKey: .location)
    ticketCost = try values.decode(String.self, forKey: .ticketCost)
    discount = try values.decode(String.self, forKey: .discount)
    startTime = try values.decode(String.self, forKey: .startTime)
    endTime = try values.decode(String.self, forKey: .endTime)

    expoAssets = try values.decode([ExpoAsset].self, forKey: .expoAssets)

}
}

解码部分是

let expoResult = try decoder.decode(ExpoDecode.self, from: data!)

请帮助确定问题

4

1 回答 1

2

使用 try/catch 处理程序处理解码抛出的错误并将其记录到控制台。如果错误是由于解码 json 造成的,您可以查看解码过程中的确切问题所在。

do {
  let expoResult = try decoder.decode(ExpoDecode.self, from: data!)
} catch {
  print("Error occurred: \(error)") // notice this line which will help you hunt for error
}
于 2018-03-06T11:34:38.503 回答