JSON处理错误:未正确获取输出

时间:2016-05-16 07:18:50

标签: ios json foreach alamofire swifty-json

我有以下JSON响应。目前,我的POST请求会给我"用户名"在我的控制台输出中。但是,当我运行应用程序时,我的alertView(在handlingAuthentication中找到,链接提供)返回nil。

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

我如何:

  • 获取字符串"用户名字段是必需的"
  • 在方法handlingAuthentication
  • 中将字符串传递给我的alertview
  • 从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

2 个答案:

答案 0 :(得分: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的消息。

希望这会有所帮助:)

答案 1 :(得分:0)

首先确定

if(errorFound as! NSObject == 1) 

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

你可以简单地说

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

这应该将数据传递给下一个方法:)