我需要在 swift4 中解析的实际 JSON 是,
{
"class": {
"semester1": [
{
"name": "Kal"
},
{
"name": "Jack"
},
{
"name": "Igor"
}
],
"subjects": [
"English",
"Maths"
]
},
"location": {
"Dept": [
"EnglishDept",
],
"BlockNo": 1000
},
"statusTracker": {
"googleFormsURL": "beacon.datazoom.io",
"totalCount": 3000
}
}
我试过但未能执行的代码是,
struct Class: Decodable {
let semester: [internalComponents]
let location: [location]
let statusTracker: [statusTracker]
enum CodingKeys: String, CodingKey {
case semester = "semester1"
case location = "location"
case statusTracker = "statusTracker"
}
}
struct location: Decodable {
let Dept: [typesSubIn]
let BlockNo: Int
}
struct statusTracker: Decodable {
let googleFormsURL: URL
let totalCount: Int
}
struct internalComponents: Decodable {
let semester1: [semsIn]
let subjects: [subjectsIn]
}
struct semsIn: Decodable {
let nameIn: String
}
struct subjectsIn: Decodable {
let subjects: String
}
struct Dept: Decodable {
let Depts: String
}
我知道这是完全错误的,有人可以给出实际格式吗?我实际上对“主题”的格式感到困惑。它也不是作为一个整体编译的。
最佳答案
有很多问题。
您犯了一个常见的错误,部分忽略了根对象。
请看一下 JSON:顶层有 3 个键 class
、location
和 statusTracker
。所有 3 个键的值都是字典,没有数组。
因为 class
(小写)是保留字,所以我使用 components
。顺便说一句,请遵守结构名称以大写字母开头的命名约定。
struct Root : Decodable {
let components : Class
let location: Location
let statusTracker: StatusTracker
enum CodingKeys: String, CodingKey { case components = "class", location, statusTracker }
}
还有很多问题。这里是其他结构的合并版本
struct Class: Decodable {
let semester1: [SemsIn]
let subjects : [String]
}
struct Location: Decodable {
let dept : [String]
let blockNo : Int
enum CodingKeys: String, CodingKey { case dept = "Dept", blockNo = "BlockNo" }
}
struct SemsIn: Decodable {
let name: String
}
struct StatusTracker: Decodable {
let googleFormsURL: String // URL is no benefit
let totalCount: Int
}
现在解码Root
do {
let result = try decoder.decode(Root.self, from: data)
} catch { print(error) }
关于ios - 如何使用 Swift Decodable 属性解码嵌套数组的嵌套字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49424179/