JSON数组解析为Swift可编码

JSON数组解析为Swift可编码,json,swift,parsing,Json,Swift,Parsing,如何将此JSON解析为可编码结构。我还利用图书馆提出请求 { "categories": [ { "categories": { "id": 1, "name": "Delivery" } }, { "categories": { "id": 2, "name": "Dine-out" } }, { "categories":

如何将此JSON解析为可编码结构。我还利用图书馆提出请求


{
  "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的。@我已经用解析代码编辑了这个问题。