【发布时间】:2020-11-21 22:51:53
【问题描述】:
您好,您能帮我获取所有数据的数组,包括 global_rank、brawlhalla_id 等吗?我只能得到像legend_id、legend_key_name 这样的图例数组。这是json
{
"name": "bmg | dan",
"brawlhalla_id": 2,
"rating": 1745,
"peak_rating": 1792,
"tier": "Platinum 2",
"wins": 207,
"games": 391,
"region": "US-E",
"global_rank": 5698,
"region_rank": 1644,
"legends": [
{
"legend_id": 4,
"legend_name_key": "cassidy",
"rating": 1736,
"peak_rating": 1792,
"tier": "Platinum 1",
"wins": 161,
"games": 300
},
{
"legend_id": 21,
"legend_name_key": "barraza",
"rating": 1640,
"peak_rating": 1640,
"tier": "Gold 5",
"wins": 41,
"games": 77
}
],
...
我的代码如下所示:
import SwiftUI
class BrawlhallaSevice {
let url = URL(string: "http://sion.red/brawlhalla/ranked.json")!
func getBrawlhalla(completion: @escaping (Result<[Brawlhalla], Error>) -> Void) {
URLSession.shared.dataTask(with: url) { data, response, error in
guard error == nil else {
completion(.failure(error!))
return
}
completion(.success(self.getBrawlhallaResponse(fromData: data!)))
}.resume()
}
private func getBrawlhallaResponse(fromData data: Data) -> [Brawlhalla] {
let brawlhallaData = try? JSONDecoder().decode(BrawlhallaResponse.self, from: data)
if let brawlhallaD = brawlhallaData {
print(brawlhallaD)
//return brawlhallaD.legends works and returns array of data about a legend
return brawlhallaD
}
return [Brawlhalla(legend_name_key: "Error", rating: 0, peak_rating: 0, tier: "Error")]
}
}
但它会引发错误:“无法将 'BrawlhallaResponse' 类型的返回表达式转换为返回类型 '[Brawlhalla]'”。 这就是我的模型的外观
import Foundation
struct BrawlhallaResponse: Codable {
let legends: [Brawlhalla]
let name: String
let rating: Int
let peak_rating: Int
let tier: String
}
import Foundation
struct Brawlhalla: Codable {
let name: String
let rating: Int
let peak_rating: Int
let tier: String
}
我已尝试对代码进行许多更改,但似乎没有任何效果。
【问题讨论】:
-
Brawlhalla有一个name: String属性,它不会出现在 JSON 中 -
我不知道你是什么意思。我想要一个包含所有可用数据的数组,但我只能显示 .legends。我想要 json 文件顶部的数据,例如:名称、区域等。
-
将您的 JSON 数据粘贴到 app.quicktype.io 以生成您需要的结构。
-
@DavidMartinek,我的意思是,在 JSON 中,在
legends: [ ]数组中,对象没有属性name,但在您的代码中,legends映射到[Brawlhalla],确实有属性name -
这是可能的。我有点新