如何解码以“开始”开头的JSON;[“使用swift可编码协议

如何解码以“开始”开头的JSON;[“使用swift可编码协议,json,swift,codable,Json,Swift,Codable,我遇到了来自服务器的JSON响应,需要处理它 基本上,JSON的根级别是数组而不是字典。例如: [ { "name": "Joe", "age": 50 }, ] 我已经构建了一个符合Codable的结构: struct response: Codable { let responseArray: [Person] } struct person: Codable { let name: String let age: Int enu

我遇到了来自服务器的JSON响应,需要处理它

基本上,JSON的根级别是数组而不是字典。例如:

[
  {
    "name": "Joe",
    "age": 50
  },
]
我已经构建了一个符合Codable的结构:

struct response: Codable {
    let responseArray: [Person]
}

struct person: Codable {
    let name: String
    let age: Int

    enum CodingKeys: String, CodingKey {
        case name = "name"
        case age = "age"
    }
}
我在尝试解码时遇到以下错误:

▿ DecodingError
  ▿ typeMismatch : 2 elements
    - .0 : Swift.Dictionary<Swift.String, Any>
    ▿ .1 : Context
      - codingPath : 0 elements
      - debugDescription : "Expected to decode Dictionary<String, Any> but found an array instead."
      - underlyingError : nil
▿ 解码误差
▿ 类型不匹配:2个元素
-.0:Swift.字典
▿ .1:背景
-编码路径:0个元素
-debugDescription:“应解码字典,但找到了数组。”
-参考误差:零
如果数组未命名,是否有方法使用编码键处理该数组


如果不是,人们将如何处理这种情况?

json的根是一个数组,dodeocde应该是
[Person]。self
您可以试试

struct Person: Codable {
    let name: String
    let age: Int  
}

显示您对
解码的调用。
。数组没有“命名”,我想您想到的是字典和它们的键。我尝试了最明显的方法来实现这一点,这让我大吃一惊!成功了:我尝试了解码[个人].self而不是response。@DavidChopin你是对的。我将编辑我的问题,以更具体地说明响应不是字典。在这里,用大写字母启动结构名称您不需要
enum CodingKey:String,CodingKey{
let res = try? JSONDecoder().deocde([Person].self,from:data)
print(res)