SwiftUi Decoding JSON



我是Swift和SwiftUi的新手,正在尝试解码JSON文件。我知道我必须使用编码键,但当键是约会时,我不知道该怎么做。

我的JSON如下所示:

{
"2020-09-01": [
"Tuesday",
[],
"N"
],
"2020-09-02": [
"Wednesday",
[
"12:00p"
],
"N"
]
}

我的模型是这样的:

struct TimeStamp: Codable {
var t =  [TimeStampForCurrentDay]()
}
struct TimeStampForCurrentDay: Codable {
let day: String
let times: [String]
let type: String
}

我得到这个错误

致命错误:"try!"表达式意外引发错误:Swift。DecodingError.keyNotFound(CodingKeys(字符串值:"t",intValue:nil(,Swift。DecodingError.Context(编码路径:[],debugDescription:"没有与键CodingKeyss(字符串值:"t";,intValue:nil(("t"(关联的值&";,underlyingError:nil((

当我尝试用这个功能解码时

try! JSONDecoder().decode(TimeStamp.self, from: responseData)

您所拥有的是一个类型为[String: [Any]]的字典,它有点难以解码。要么使用JSONSerialization直接解码到此字典类型的

do {
let result = try JSONSerialization.jsonObject(with: data) as? [String: [Any]]
//...
} catch {
print(error)
}

但是,如果每个数组中的值的顺序总是相同的,即天/时间/类型,那么我们可以使用自定义init进行解码,以获得类型为[String: TimeStampForCurrentDay]的字典

struct TimeStampForCurrentDay: Codable {
let day: String
let times: [String]
let type: String
init(from decoder: Decoder) throws {
var container = try decoder.unkeyedContainer()
day = try container.decode(String.self)
times = try container.decode([String].self)
type = try container.decode(String.self)
}
}
do {
let result = try JSONDecoder().decode([String: TimeStampForCurrentDay].self, from: data)
print(result)
} catch {
print(error)
}

相关内容

  • 没有找到相关文章

最新更新