如何使用Swift 5 Codable协议将嵌套的json数组解码为swift对象数组?

问题描述 投票:-2回答:1

我正在尝试将下面的json转换为快速对象数组,但是我的网络代码无法正常工作,我也不明白为什么。我认为结构很好。我有没有想说的一点?

这是我的json

[
{
    "_id": "5dea3ab67d9a460017740940",
    "chamber_id": {
        "_id": "5d94d5cb363db3168af5fb6b",
        "name": "Adana Eczacı Odası",
        "image_url": "http://eczachat.com/logos-sites/4.jpg"
    },
    "title": "E-FATURAYA GEÇİŞ SÜRECİ İLE İLGİLİ BİLGİLENDİRME TOPLANTISI",
    "url": "http://www.adanaeo.org.tr/haber-8448",
    "type": "chamber",
    "created_at": "2019-12-06T11:25:42.399Z",
    "updatedAt": "2019-12-06T11:25:42.399Z",
    "__v": 0
},
{
    "_id": "5de9f56a7d9a460017740924",
    "chamber_id": {
        "_id": "5d94d5cb363db3168af5fb9e",
        "name": "Türk Eczacıları Birliği",
        "image_url": "http://eczachat.com/logos-sites/teb.jpg"
    },
    "title": "06.12.2019 | 42. Dönem Merkez Heyeti ve Denetleme Kurulu Görev Dağılımı",
    "url": "https://www.teb.org.tr/news/8561/42-Dönem-Merkez-Heyeti-ve-Denetleme-Kurulu-Görev-Dağılımı",
    "type": "site",
    "created_at": "2019-12-06T06:30:02.206Z",
    "updatedAt": "2019-12-06T06:30:02.206Z",
    "__v": 0
}
]

这是我的结构

struct FeedContent: Codable {
var _id: String
var chamber_id: Chamber
var title: String
var url: String
var created_at: String
}

struct Chamber: Codable {
var _id: String
var name: String
var image_url: String
}

这是我的快速联网代码

         URLSession.shared.dataTask(with: urlRequest){(data, response, error) in
        if error != nil{
            completion(.failure(error!))
        } else {
            guard let response = response as? HTTPURLResponse, let jsonData = data else { return }
            if response.statusCode == 422 {
                let apiErrorData = try? JSONDecoder().decode(APIError.self, from: jsonData)
                guard let apiError = apiErrorData else { return }
                completion(.failure(apiError))
            }
            if response.statusCode == 200 {
                do {
                    let feedData = try JSONDecoder().decode([FeedContent].self, from: jsonData)
                    completion(.success(feedData))
                } catch let jsonError {
                    completion(.failure(jsonError))
                }

            }
        }
    }.resume()

EDIT:我正在尝试使用catch块,但xcode不会引发任何错误。

json swift struct codable swift5
1个回答
0
投票

我正在检查您的DTO模型与您有疑问的JSON字符串。似乎它们完美匹配,应该可以使用。

© www.soinside.com 2019 - 2024. All rights reserved.