如何将带有多个结构的JSON附加到数组中?

时间:2018-07-19 01:35:18

标签: json swift struct swift4 decode

为了解析JSON,我需要使用3种结构。

struct AppleApi: Decodable {
    let feed: Feed
}

struct Feed: Decodable {
    let results: [Result]
}

struct Result: Decodable {
    let artistName: String
    let artWorkUrl: String

    enum CodingKeys : String, CodingKey {
        case artistName = "artistName"
        case artWorkUrl = "artworkUrl100"
    }
}

但是当我尝试用解析后的数据填充数组时,我得到了以下消息:

  

无法将类型“ [结果]”的值转换为预期的参数类型   “ AppleApi”

这是我的错误消息:

enter image description here

do {
    let appData = try JSONDecoder().decode(AppleApi.self, from: jsonData)
    print(appData.feed.results.count)
    var dataApp = appData.feed.results
    print(appData)
    DispatchQueue.main.async {
        self.feedReseult.append(dataApp)
        self.myCollectionView.reloadData()
    }

} catch let err {
    print("Error",err)
}

这是我的数组:

var feedReseult = [AppleApi]()

我可能需要到达3.结构才能到达JSON内部的数组,以便具有相同类型的参数类型。我该怎么办?

2 个答案:

答案 0 :(得分:0)

您的feedReseult声明应为

var feedReseult = [Result]()

并按如下所示附加dataApp

DispatchQueue.main.async {
    self.feedReseult.append(contentsOf: dataApp)
    self.myCollectionView.reloadData()
}

我也感觉错了,feedResult而不是feedReseult

答案 1 :(得分:0)

看来您来自Json的结构未正确组合,您每一个JSON加载只需要一个结构。你能给JSON样本吗?

如果要解码AppleAPI中的Feed,则应创建AppleApi.Feed类型的对象并将结果放入其中。

希望这会有所帮助