JSON数组解析到Swift Codeable[关闭]。

问题描述 投票:0回答:1

我如何将这个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)
            }
        }


json swift parsing
1个回答
1
投票

原因是

在你的模型中 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)
}
© www.soinside.com 2019 - 2024. All rights reserved.