2016-03-25 7 views
1

Ich versuche NBA Wertung auf dieser Website zu erhalten https://erikberg.com/api diese zu kategorisieren zu tun, ich AlmoFire bin mit einer Get-Anfrage zu machen:Wie analysieren und JSON-Antwort von AlamoFire in Xcode

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

Was Dies ist ein Antwort-Array mit einem NSURLRequest bei Index 0, einem NSHTTPURLResponse bei Index 1 und einem Ergebnis vom Typ AnyObject bei Index 2. Das AnyObject, wenn gedruckt, führt dazu (ich zeige nur ein Team, weil das Array ist sehr lang):

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...

Ich würde gerne wissen, wie ich diese Daten analysieren kann, damit ich jedes Team basierend auf ihrer Rangliste extrahieren und kategorisieren kann. Vielen Dank

Antwort

1

Sie können ObjectMapper verwenden, um JSON zu parsen. Erstellen Sie eine Standing-Klasse, die den gesamten JSON-zu-Objekt-Mapping-Code enthält.

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"] 
     ... 
    } 

In ähnlicher Weise, machen Sie eine Elternklasse, Array of Standing zu halten.

class ParentJson: Mappable { 
    var standingsDate: String? 
    var standing: [Standing] 
} 

func mapping(map: Map) { 
    standing <- map["standing"] 
} 

Und dann in Ihrer alamofire Antwort, Karte, um die entsprechende Klasse

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 werden nun alle Daten erforderlich zu kategorisieren.

+0

Ich habe genau das, was Sie getan haben, aber ich habe einen Fehler: Befehl fehlgeschlagen aufgrund Signal: Segmentation fault: 11, und dies verursacht Xcode –

+0

abstürzen ich herausgefunden, wie man den Fehler loswerden, aber wenn ich versuche, die Saat oder die Gewinne eines Teams auszudrucken, ist die Ausgabe leer; Alles was es gibt ist (llbd). Hier ist mein Code 'Alamofire.request (.get "https://erikberg.com/nba/standings.json") .responseJSON {Reaktion in lassen parentJson = Mapper () .map (response.2 .value) lassen standingsArray: [Team] = parentJson! .standing! let Team = Mapper () .map (standingsArray [0]) print (Team? .seed) } ' –

+0

können Sie einfach Zugang Samen von standingsArray Aufruf [0] .playoffSeed. Ich gehe davon aus, dass Sie Werte korrekt zugeordnet haben. In deiner Ständigen Klasse hättest du es als 'playoffSeed <- map [" playoff_seed "]' abbilden sollen, wo playoffSeed eine ganze Zahl ist. – AnonymousRacer

-1

Ich benutze das SwiftyJSON Paket für alle Dinge JSON verwandt. Dann können Sie dieses Idiom verwenden

.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) 
    } 
Verwandte Themen