我一直试图从我的JSON
解析此对象,并不断收到此错误:
“错误:typeMismatch(Swift.Array, Swift.DecodingError.Context(codingPath:[],debugDescription: “打算对数组进行解码,但是找到了一个字典。”, 底层错误:nil))\ n“
如果我从此处let video = try decoder.decode([Content].self, from: data)
卸下阵列支架,则会收到一条错误消息:
“错误:keyNotFound(CodingKeys(stringValue:” description“,intValue:nil),Swift.DecodingError.Context(codingPath:[],debugDescription:”没有与Key CodingKeys(stringValue:\“ description \”, intValue:nil)(\“描述\”)。“,底层错误:nil))\ n”
我该如何解决?这是我的JSON
和代码:
JSON:
> { "content": [{
> "description": "Hello",
> "category": "World wides",
> "creator": {
> "name": "The One",
> "site": "Purple",
> "url": "http://www.sample.com"
> },
> "time": 300,
> "full": "https:sample2.com",
> "clothes": "jacket",
> }]
}
struct Content: Decodable {
let description: String
let category: String
}
if let fileURL = Bundle.main.url(forResource: "stub", withExtension: "json") {
do {
let data = try Data(contentsOf: fileURL)
let decoder = JSONDecoder()
let video = try decoder.decode([Content].self, from: data)
print(video.description)
// Success!
// print(content.category)
} catch {
print("Error: \(error)")
}
} else {
print("No such file URL.")
}
答案 0 :(得分:3)
在您的JSON数据中,content
包含一个由单个元素组成的数组。
我建议您这样创建结构:
struct Response: Decodable {
let content: [Item]
}
struct Item: Decodable {
let description: String
let category: String
}
然后您可以对其进行解码并像这样使用它:
let response = try decoder.decode(Response.self, from: data)
guard !response.content.isEmpty else { // error handling here }
let video = response.content[0]
答案 1 :(得分:0)
缺少根对象的对应结构,该结构是带有键{}
的字典(content
)。
这说明了两条错误消息(该对象是一个字典,没有键description
)。
键content
的值是一个数组,因此您需要循环以遍历项目。
struct Root : Decodable {
let content : [Content]
}
struct Content: Decodable {
let description: String
let category: String
}
...
let root = try decoder.decode(Root.self, from: data)
let content = root.content
for item in content {
print(item.description)
}