JSON数组解析为Swift可编码
如何将此JSON解析为可编码结构。我还利用图书馆提出请求JSON数组解析为Swift可编码,json,swift,parsing,Json,Swift,Parsing,如何将此JSON解析为可编码结构。我还利用图书馆提出请求 { "categories": [ { "categories": { "id": 1, "name": "Delivery" } }, { "categories": { "id": 2, "name": "Dine-out" } }, { "categories":
{
"categories": [
{
"categories": {
"id": 1,
"name": "Delivery"
}
},
{
"categories": {
"id": 2,
"name": "Dine-out"
}
},
{
"categories": {
"id": 3,
"name": "Nightlife"
}
}
]
}
现在,我的可编码结构如下所示:
结构响应:可编码{
结构类别:可编码{
让id:Int
let name:String
}
var类别:类别
}
我发现一个错误,说应该解码数组,但找到了一个字典。
更新
provider.request(.categories){(结果)在
//guard let self=self-else{return}
切换结果{
成功案例(让我们回答):
让data=response.data
//让json=try?json(数据:data)
//swiftlint:禁用:下一次强制尝试
让test=try!JSONDecoder().decode([Respo].self,from:data)
打印(测试)
//self.collectionView.reloadData()
案例。失败(let错误):
打印(错误)
}
}
原因:
在您的模型中,响应
,类别
的类型为类别
。但根据您的JSON响应,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)
}
对
[swift]“本应解码数组,但却找到了字典”的50多个搜索结果。
没有任何帮助?@MartinR trust me没有任何帮助。我可以把我的chrome发给你history@MartinR我已经更新了我的问题…现在它显示了我如何解码JSON…请看一看。但是看看你的JSON和你的代码,你没有顶级数组。这不能是真正的代码,因为你的代码中没有struct Respo
。无论如何,decode([Respo].self,from:data)
需要一个数组,而您的JSON(带花括号)就是一个字典。非常感谢您的回复。给出同样的错误。我已经更新了我的问题,它显示了我是如何解码JSON的。@我已经用解析代码编辑了这个问题。