解码错误:“应解码 Dictionary<String, Any>,但找到了一个数组。”
Posted
技术标签:
【中文标题】解码错误:“应解码 Dictionary<String, Any>,但找到了一个数组。”【英文标题】:Decoding error: “Expected to decode Dictionary<String, Any> but found an array instead.” 【发布时间】:2018-12-17 19:14:03 【问题描述】:JSON 解码有问题。我为这个问题添加了其他答案,我也做了同样的事情,但我仍然得到错误。我做错了什么?
URLSession.shared.dataTask(with: r) (data, response, error) in
do
guard let data = data else return
let banners = try JSONDecoder().decode([Banner].self, from: data)
print(banners)
catch let error as NSError
print(error)
.resume()
struct Banner: Decodable
var title: String
var desc: String
var image: String
JSON响应:
[
"id": "b4a95512-8de2-4621-8956-3289e991fb0b",
"image": "https://picsum.photos/500/324/"
,
"id": "4e1c703d-4841-469b-be2e-8f15d6cbd0c3",
"title": "Lays",
"image": "https://picsum.photos/500/324/"
,
"id": "4315705e-e6fc-4dfa-a52e-c9de2031ed53",
"desc": "ФРУТОНЯНЯ Для детского питания с яблоком, для малышей от 0 до 3 лет",
"image": "https://picsum.photos/500/324/"
,
"id": "0b8e40ae-5e13-4bdd-905d-a13ffdd94b65",
"title": "Бульмени",
"desc": "ГОРЯЧАЯ ШТУЧКА Со сливочным маслом",
"image": "https://picsum.photos/500/324/"
]
【问题讨论】:
此 JSON 和代码不会导致此错误。你应该得到一个keyNotFound
错误。并删除let error as NSError
。解码错误永远不会是NSError
。
【参考方案1】:
您的结构中缺少"id"
键。 desc
和 title
没有为 json 响应中的所有元素提供,因此它们应该是可选的。
改用这个结构:
struct Banner: Codable
let id: String
let image: String
let title, desc: String?
另外,这样捕获错误:
catch
print(error)
【讨论】:
如果您不需要该数据,则结构中不需要id
属性。以上是关于解码错误:“应解码 Dictionary<String, Any>,但找到了一个数组。”的主要内容,如果未能解决你的问题,请参考以下文章
Python JSON to CSV - 编码错误,UnicodeDecodeError:'charmap'编解码器无法解码字节
解码错误:typeMismatch“预期解码 Array<Any> 但找到了字典。”
解码错误:“应解码 Dictionary<String, Any>,但找到了一个数组。”