【发布时间】:2020-07-17 21:21:55
【问题描述】:
我有一个本地 JSON 并尝试解码,但出现“预期解码 Array 但找到字典”错误。 json文件和下面的两个结构:
{
"Stanford University": [{
"type": "government",
"name": "Stanford University",
"city": "Santa Clara",
"major": "Computer Engineering"
},
{
"type": "government",
"name": "Stanford University",
"city": "Santa Clara",
"major": "Economics"
}
],
"Berkeley University": [{
"type": "foundation",
"name": "Berkeley University",
"city": "Alameda",
"major": "Communication"
},
{
"type": "foundation",
"name": "Berkeley University",
"city": "Alameda",
"major": "Physics"
}
]
}
两个结构:
struct Universite4: Codable {
let name: String?
let major:[Major]?
}
struct Major: Codable {
let type: String?
let name: String?
let major: String? }
这是数据加载和解码的代码;
public class DataLoader {
@Published var universite4 = [Universite4]()
init() {
load()
}
func load() {
if let unv4json = Bundle.main.url(forResource: "unv4", withExtension: "json") {
do {
let data = try Data(contentsOf: unv4json)
let jsonDecoder = JSONDecoder()
let dataFromJson = try jsonDecoder.decode([Universite4].self, from:data)
self.universite4 = dataFromJson
} catch {
print("Error: \(error)")
}
}
}
}
有人知道我该如何修复上面的代码吗?问候。
【问题讨论】:
-
最简单的方法是使用quicktype.io 可以将您的 json 转换为 swift 结构的站点。但基本上错误很明显,您试图将 json 数据解码为一个数组,但它是一个以“斯坦福大学”为键的字典。 (和 struct Major 不相关)
-
对不起 Joakim,这是我的错误,我已经修复了 json 并再次过去。结构 Major 现在是相关的。
-
好吧,您在 json 的顶层没有键“名称”,所以现在 Universite4 不相关,请参阅下面来自 Camilo 的答案
-
嗨 Joakim,如果我在 json 的顶层没有“name”键怎么办?可以通过其他方式实现吗?
-
再来看看下面的答案。
标签: json swift dictionary parsing