2016-10-04 2 views
0

У меня возникают проблемы с разбором входящего JSON.Анализ результатов Alamofire на объекты в Swift (с использованием: Alamofire, SwiftyJSON & ObjectMapper)

Это моя функция:

func postCheckUserPhonenumbers(phonenumbers:[String], completionHandler: (([AnyObject?], AnyObject?) -> Void)) { 
     let urlString = Constant.apiUrl().stringByAppendingFormat(Constant.apiPostCheckUserPhonenumbers) 

     let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] }) 

     let JSON = try? NSJSONSerialization.dataWithJSONObject(phoneNumbersDictionary, options: []) 

     let request = NSMutableURLRequest(URL: NSURL(string: urlString)!) 
     request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.HTTPMethod = "POST" 
     request.HTTPBody = JSON 

     Alamofire.request(request).validate().responseJSON(completionHandler: {response in 
      if response.result.isSuccess{ 
       if let value = response.result.value { 
//     let json = JSON(value) 
        if let users:Array<User> = Mapper<User>().mapArray(value) { 
         completionHandler(users, nil) 
        } else { 
         completionHandler([nil], nil) 
        } 
       } 
      } 
      if response.result.isFailure{ 
       let message = ApiMessage() 
       message.message = "No users found" 
       completionHandler([nil],message) 
      } 
     }) 
    } 

enter image description here

Обычно я бросаю результат в формате JSON первого, но на этот раз я получаю ошибку компиляции при попытке сделать это:

enter image description here

+2

у вас есть переменная JSON, которая является NSData – Horst

ответ

0

Это действительно моя переменная JSON, объявленная выше функции. Я теперь получил это:

func postCheckUserPhonenumbers(phonenumbers:[String], completionHandler: (([AnyObject?], AnyObject?) -> Void)) { 
    let urlString = Constant.apiUrl().stringByAppendingFormat(Constant.apiPostCheckUserPhonenumbers) 

    let phoneNumbersDictionary = phonenumbers.map({ ["number": $0] }) 

    let inputJSON = try? NSJSONSerialization.dataWithJSONObject(phoneNumbersDictionary, options: []) 

    let request = NSMutableURLRequest(URL: NSURL(string: urlString)!) 
    request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.HTTPMethod = "POST" 
    request.HTTPBody = inputJSON 

    Alamofire.request(request).validate().responseJSON(completionHandler: {response in 
     if response.result.isSuccess{ 
      if let value = response.result.value { 
       let json = JSON(value) 
       let jsonString = json.rawString() 
       if let users:Array<User> = Mapper<User>().mapArray(jsonString) { 
        completionHandler(users, nil) 
       } else { 
        completionHandler([nil], nil) 
       } 
      } 
     } 
     if response.result.isFailure{ 
      let message = ApiMessage() 
      message.message = "No users found" 
      completionHandler([nil],message) 
     } 
    }) 
} 
+0

Вы не используете SwiftyJSON здесь. В этом примере вы разбираете JSON в объект JSON и позже используете только строковое представление, поэтому ObjectMapper снова проанализирует его (из строки на этот раз). Рассмотрите возможность использования пакета https://github.com/tristanhimmelman/AlamofireObjectMapper. Или делайте подобное руками. –