【问题标题】:How to parse and categorize JSON response from AlamoFire in xcode如何在 xcode 中解析和分类来自 AlamoFire 的 JSON 响应
【发布时间】:2016-07-12 21:28:44
【问题描述】:

我正在尝试从该网站获取 NBA 积分榜https://erikberg.com/api 为此,我使用 AlmoFire 发出 Get 请求:

Alamofire.request(.GET, "https://erikberg.com/nba/standings.json") .responseJSON { response in print(response.2.value) }

返回的是一个响应数组,在索引 0 处有一个 NSURLRequest,在索引 1 处有一个 NSHTTPURLResponse,在索引 2 处有一个 AnyObject 类型的结果。打印时,AnyObject 会产生这个结果(我只显示一个团队因为数组很长):

Optional({ standing = ( { "away_lost" = 14; "away_won" = 21; conference = EAST; "conference_lost" = 13; "conference_won" = 29; division = CEN; "first_name" = Cleveland; "games_back" = 0; "games_played" = 71; "home_lost" = 6; "home_won" = 30; "last_five" = "4-1"; "last_name" = Cavaliers; "last_ten" = "7-3"; lost = 20; "ordinal_rank" = 1st; "playoff_seed" = 1; "point_differential" = 437; "point_differential_per_game" = "6.2"; "points_against" = 6948; "points_allowed_per_game" = "97.9"; "points_for" = 7385; "points_scored_per_game" = "104.0"; rank = 1; streak = W2; "streak_total" = 2; "streak_type" = win; "team_id" = "cleveland-cavaliers"; "win_percentage" = ".718"; won = 51; },exc...

我想知道如何解析这些数据,以便根据他们的排名提取和分类每个团队。 谢谢

【问题讨论】:

    标签: ios arrays json swift http


    【解决方案1】:

    您可以使用ObjectMapper 来解析 JSON。创建一个包含所有 JSON 到对象映射代码的 Standing 类。

    class Standing: Mappable {
        var awayLost: Int?
        var awayWon: Int?
        .....      // Define all variables
        required init?(_ map: Map) {}
    
        // This function is used to map all variables to corresponding JSON strings
        func mapping(map: Map) {      
             awayLost <- map["away_lost"]
             awayWon <- map["away_won"]
             ... 
        }
    

    同样,创建一个父类来保存站立数组。

    class ParentJson: Mappable {
        var standingsDate: String?
        var standing: [Standing]
    }
    
    func mapping(map: Map) {
        standing <- map["standing"]
    }
    

    然后在你的alamofire响应中,映射对应的类

    Alamofire.request(.GET, "https://erikberg.com/nba/standings.json")
            .responseJSON { response in
                 let parentJson = Mapper<ParentJson>().map(response.2.value)
                 let standingsArray: [Standing] = parentJson.standing
    

    standingArray 现在将拥有分类所需的所有数据。

    【讨论】:

    • 我完全按照你的做法做了,但我得到了一个错误:由于信号而导致命令失败:分段错误:11,这导致 xcode 崩溃
    • 我想出了如何摆脱错误,但是当我尝试打印出一个团队的种子或胜利时,输出为空;一切都是(llbd)。这是我的代码Alamofire.request(.GET, "https://erikberg.com/nba/standings.json") .responseJSON { response in let parentJson = Mapper&lt;Standings&gt;().map(response.2.value) let standingsArray: [Team] = parentJson!.standing! let team = Mapper&lt;Team&gt;().map(standingsArray[0]) print(team?.seed) }
    • 您可以通过调用standingsArray[0].playoffSeed 访问种子。我假设您已正确映射值。在您的 Standing 课程中,您应该将其映射为 playoffSeed &lt;- map["playoff_seed"] 其中 playoffSeed 是一个整数
    • 我已经让它工作了,但是当我打印 playoffSeed 的值时,它返回 Optional(seed) 而不仅仅是种子
    【解决方案2】:

    我使用 SwiftyJSON 包来处理所有与 JSON 相关的事情。那么,你就可以使用这个成语了

    .responseJSON { response in
        switch response.result {
        case .Success:
            if let value = response.result.value {
                let json = JSON(value)
                if let datum = json["field"].string { // Depending on expected type; see docs
    
                }
    
         case .Failure(let error):
             print(error)
         }
    

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2021-07-22
      • 2018-09-14
      相关资源
      最近更新 更多