嵌套的JSON Feed返回错误

时间:2017-12-06 18:09:29

标签: json swift nested

我是JSON feed的新手,一般是swift 4。我在嵌套JSON Feed中打印数据时遇到问题。首先,我不确定我是否在我的do语句中正确调用数组。其次,当我构建应用程序时,我得到以下长错误。任何人都可以帮我解读这个吗?我的代码位于帖子的底部。先感谢您。

  

2017-12-06 12:58:48.604154-0500 PlayerRankDOTA2 [91584:6694163] [BoringSSL]函数boringssl_context_get_peer_sct_list:第1754行收到的sct扩展长度小于sct数据长度   错误jsonErr dataCorrupted(Swift.DecodingError.Context(codingPath:[PlayerRankDOTA2.PlayerStatsParent。(CodingKeys in _053A446F694D6B16CE13A0E302B3B14A).rankings,Foundation。(_ JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue:“Index 0”,intValue:Optional(0)),PlayerRankDOTA2。 PlayerStats。(CodingKeys in _053A446F694D6B16CE13A0E302B3B14A).score],debugDescription:“Parsed JSON number< 3099.96838722024>不适合Int。”,underlyingError:nil))“

import UIKit

struct PlayerStatsParent:Decodable{
    let rankings: [PlayerStats]
}

struct PlayerStats:Decodable {
    let personaname: String
    let score: Int
    let solo_competitive_rank: Int
    let avatar: String
}

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let jsonUrlString = "https://api.opendota.com/api/rankings"
        guard let url = URL(string: jsonUrlString) else {return}
        URLSession.shared.dataTask(with: url) { (data, response, error)  in
            guard let data = data else {return}
            //let dataAsString = String(data: data, encoding: .utf8)
            //print(dataAsString)
            do{
                let playerStatsParent = try JSONDecoder().decode(PlayerStatsParent.self, from: data)
                print(playerStatsParent.rankings)
            } catch let jsonErr {
                print("Error jsonErr", jsonErr)
            }
        }.resume()
    }

    let jsonUrlString = "https://api.opendota.com/api/rankings"

}

1 个答案:

答案 0 :(得分:0)

您必须对PlayerStats进行一些更改。首先,score必须是Double,因为这是API返回的格式。其次,JSON响应中的所有值都可以是null。解决此问题的一种方法是将所有属性定义为可选项。

struct PlayerStats:Decodable {
    let personaname: String?
    let score: Double?
    let solo_competitive_rank: Int?
    let avatar: String?
}

PlayerStats结构更改为上述格式后,解码工作正常。