我如何将这个JSON解析成Codeable结构。我也在使用 莫亚 图书馆申请
{
"categories": [
{
"categories": {
"id": 1,
"name": "Delivery"
}
},
{
"categories": {
"id": 2,
"name": "Dine-out"
}
},
{
"categories": {
"id": 3,
"name": "Nightlife"
}
}
]
}
现在我的Codeable结构是这样的。
struct Response: Codable {
struct Category: Codable {
let id: Int
let name: String
}
var categories: Category
}
我得到一个错误信息说 本以为会解码数组,但却发现了一个字典。
更新
provider.request(.categories) { (result) in
// guard let self = self else { return }
switch result {
case .success(let response):
let data = response.data
//let json = try? JSON(data: data)
// swiftlint:disable:next force_try
let test = try! JSONDecoder().decode([Respo].self, from: data)
print(test)
// self.collectionView.reloadData()
case .failure(let error):
print(error)
}
}
原因是
在你的模型中 Response
, categories
属于 Category
. 但根据你的JSON回复。categories
是一个 字典数组. 这就是为什么它给 本以为要解码数组,但却发现了一个字典。
解决办法。
categories
响应模式必须是 [[String:Category]]
而不是。
所以,解析上述数据的模型应该是。
struct Response: Codable {
let categories: [[String:Category]]
}
struct Category: Codable {
let id: Int
let name: String
}
编辑。
解析:
do {
let response = try JSONDecoder().decode(Response.self, from: data)
print(response)
} catch {
print(error)
}