2016-05-16 29 views
0

我有以下JSON响应。目前,我的POST请求会在我的控制台输出中给我“用户名”。然而,当我运行应用程序时,我的alertView(在handlingAuthentication中找到,链接提供)返回nil。JSON处理错误:输出未正确提取

{ 
    "username" : [ 
    "The username field is required." 
    ], 
    "password" : [ 
    "The password field is required." 
    ] 
} 

我如何:

  • 得到字符串“username字段需要”
  • 字符串传递给我的alertview的方法handlingAuthentication
  • 获得多个字符串从JSON响应(例如,在AlertView中打印:“密码字段是必需的下一行用户名字段是必需的。”)

这是我的POST请求

import Foundation 
import Alamofire 
import SwiftyJSON 
import RealmSwift 

class Login { 

init(userName: String, passWord: String) { 
    Data.sharedInstance.userName = userName 
    Data.sharedInstance.passWord = passWord 
} 

// call this method to login 
func getRequest() { 

    Alamofire.request(.POST, Data.todoEndpoint, parameters: ["username": Data.sharedInstance.userName!, "password": Data.sharedInstance.passWord!]) 
     .responseJSON { response in 

      var errorFound = Bool() 
      var errorMessage = String() 

      if let result = response.result.value 
      { 
       let value = JSON(result) 
       var outcome = String() 

       //No username 
       if value["password"] == nil && value["message"] == nil && value["name"] == nil 
       { 
        errorFound = true 
        for output in value { 
         errorMessage = output.0 
         print(errorMessage) 
        } 

       } 

      } 
      else 
      { 
       print("JSON data is nil.") 
      } 

      let errorDict = ["error": errorFound, "message": errorMessage] 
     NSNotificationCenter.defaultCenter().postNotificationName("errorPresent", object:errorDict) 


    } 

} 


} 

的地方,我显示我的警告消息的代码是在这里https://codeshare.io/VilQl

回答

0

OK首先

if(errorFound as! NSObject == 1) 

的应该是给你一个警告,如if let errorFound = dict["error"]{的errorFound所以使用如将已经解开!是多余的:)

,你可以简单地说

if(errorFound as NSObject == 1) 

let errorMessage = dict["message"]?.stringValue这可以被替换为

let errorMessage : String! = dict["message"]! as! String 

,并在情况下,你如果字典里对关键信息或不

任何价值想检查
if let errorMessage = dict["message"] as? String{ 
    print("\(errorMessage)") 
} 

现在您的警报应该正常显示:)

编辑

按您的评论:)

if value["message"] == nil && value["name"] == nil 
{ 
    errorFound = true 
    errorMessage = value["username"][0] 
    errorMessage += "\n" 
    errorMessage += value["password"][0] 
} 

这应该通过数据来下一个方法:)

+0

对于我的POST请求,我怎么了“的用户名字段是必需的“?我曾尝试输出[“用户名”],但我会被抛出一个“类型元素没有下标成员”的错误。 – noobdev

+0

我试过这样做,但我会被抛出一个“不能下标类型'JSON'的值的类型'字符串'的索引”错误 – noobdev

+0

@noobdev:我不好,你可以尝试我更新的答案:) –

1

你可以做这样的事情,

var dict: [NSObject : AnyObject] = [NSObject : AnyObject]() // your response here which you have print in question 
    var arr: [AnyObject] = (dict["username"] as! [AnyObject]) 
    let str: String = arr[0] as! String 

然后通过这个字符串以alertview的消息。

希望这将有助于:)