2017-04-19 5 views
0

Ich versuche, die einen Rest WebService ...Parsen JSON - Alamofire

Meine JSON-Antwort-Struktur zu konsumieren ist:

"page": 1, 
    "results": [ 
    { 
     "poster_path": "/9Hj2bqi955SvTa5zj7uZs6sic29.jpg", 
     "adult": false, 
     "overview": "", 
     "release_date": "2015-03-15", 
     "genre_ids": [ 
     99 
     ], 
     "id": 441580, 
     "original_title": "The Jinx: The Life and Deaths of Robert Durst Season 1 Chapter 6: What the Hell Did I Do?", 
     "original_language": "en", 
     "title": "The Jinx: The Life and Deaths of Robert Durst Season 1 Chapter 6: What the Hell Did I Do?", 
     "backdrop_path": "/3br0Rt90AkaqiwVBZVvVUYD1juQ.jpg", 
     "popularity": 1, 
     "vote_count": 1, 
     "video": false, 
     "vote_average": 10 
    } 
], 
    "total_results": 307211, 
    "total_pages": 15361 
} 

Ich versuche Seite und Array der Ergebnisse zu bekommen ... aber page (paginationCount) und result (jsonArray) variable sind nach dem Parsen null.

Es ist mein Code:

Alamofire.request(ConstantHelper.kUrlDiscoverMovies, method: .get, parameters: ["api_key": ConstantHelper.kApiKey, "certification" : average, "sort_by" : "vote_average.desc" ]).validate() 
      .responseJSON { response in 
       switch response.result { 
       case .success: 
        if let repoJSON = response.result.value as? JSON { 
         let jsonArray = repoJSON["results"] as? NSMutableArray 
         for item in jsonArray! { 
          guard let movie = Movie(json: item as! JSON) else 
          { 
           print("Issue deserializing model") 
           return 
          } 
          listMovies.append(movie) 
         } 
         if let paginationCount = repoJSON["total_pages"] as? String { 
          completion(listMovies, Int(paginationCount)!, nil) 
         } 
         else { 
          completion(listMovies, 0, nil) 
         } 
        } 
        break 
       case .failure(let error): 
        completion(nil, 0, error as NSError?) 
        break 
       } 
     } 
+0

Nach dem Parsen? Woher? In der Erfolgsschließung, funktioniert es? – Larme

+0

Innerhalb des Erfolgs Schließung ... lassen PaginationCount ist Null – Developer2012

Antwort

3

Ich weiß nicht, welche Art JSON ist,

aber der Wert für die Schlüssel results ist [[String:Any]], nieNSMutableArray

let jsonArray = repoJSON["results"] as? [[String:Any]] 

und der Wert für die Schlüssel total_pages ist Int nicht String (Es gibt keine Anführungszeichen)

if let paginationCount = repoJSON["total_pages"] as? Int { 
    completion(listMovies, paginationCount, nil) 
} 
0

Sie können ganz einfach analysieren json einig nativen Swift-Methode (keine Notwendigkeit alarmofire verwenden), können Sie einfach die Funktion verwenden, wenn Sie eine Post-Anforderung haben, mit einiger Post Parameter.

PS: a ist nur eine Liste von Tag-Wert, das Tag ist in den meisten Fällen ein String und der Wert könnte vom Typ anyObject oder sogar eine Liste oder ein Wörterbuch sein. Dazu müssen Sie die Daten, die Sie vom Server erhalten, an die Variablen anpassen, die Sie initialisiert haben.

func parseMyJSon(_ username: String, password: String) { 

    var request = URLRequest(url: URL(string: "https://myurlHere")!) // if you have a http please enable the http connection 
    request.httpMethod = "POST" // if you have a get request just change it to get 
    // the post parameters 
    let postString = "user_name=\(username)&password=\(password)" 
    // Get the request :(get the json) 
    request.httpBody = postString.data(using: String.Encoding.utf8) 

    let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { data, response, error in 
     guard error == nil && data != nil else { 
      print("error=\(error)") 

      // Do something 

      return 
     } 
     print("the data we have got from the server : \(data!)") 
     // Do Something 
     // think about casting your data to NSDictionnary<String,anyObject> in your case or NSDictionnary<String,[String]> // if your values contains a list of Strings 
    }) 

    task.resume() 
}