解码Swift 4中的小写和大写JSON键

时间:2018-01-31 09:49:06

标签: swift swift4 jsondecoder

我有以下表示JSON的结构:

struct Todo: Codable {
    let ID: Int?
    let LAST_DT_ADD: String?
    let LAST_ID:Int?
}

当我以相同的方式使用解码时:

let decoder = JSONDecoder()
do {
  let todo = try decoder.decode(Todo.self, from: responseData)
  completionHandler(todo, nil)
} catch {
  print("error trying to convert data to JSON")
  print(error)
  completionHandler(nil, error)
}

它正确解码,但当我有小写的JSON项目时(例如,而不是IDLAST_DT_ADDLAST_ID,我有id,{{1} }和last_dt_add),它不解码对象。我需要做什么?我怎样才能支持大写和小写?

1 个答案:

答案 0 :(得分:3)

您应在CodingKeys枚举中提供正确的版本作为关联值。

enum CodingKeys: String, CodingKey {
    case ID = "id"
    case LAST_DT_ADD = "last_dt_add"
    case LAST_ID = "last_id"
}

请注意,在Swift中,命名变量的约定在camelCase中是标准化的而不是snake_case。