JSON handling error: Output not fetched correctly
JSON handling error: Output not fetched correctly
我有以下 JSON 回复。目前,我的 POST 请求将在我的控制台输出中给我 "username"。但是我的 alertView(在 handlingAuthentication 中找到,link 提供)returns 当我 运行 应用程序时为零。
{
"username" : [
"The username field is required."
],
"password" : [
"The password field is required."
]
}
我该怎么做:
- 获取字符串"The username field is required"
- 在 handlingAuthentication 方法中将字符串传递到我的 alertview
- 从 JSON 响应中获取多个字符串(例如,在 AlertView 中打印:"The password field is required.next lineThe username field is required.")
这是我的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
你可以这样做,
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 的消息。
希望这会有所帮助:)
首先确定
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]
}
这应该将数据传递给下一个方法:)
我有以下 JSON 回复。目前,我的 POST 请求将在我的控制台输出中给我 "username"。但是我的 alertView(在 handlingAuthentication 中找到,link 提供)returns 当我 运行 应用程序时为零。
{
"username" : [
"The username field is required."
],
"password" : [
"The password field is required."
]
}
我该怎么做:
- 获取字符串"The username field is required"
- 在 handlingAuthentication 方法中将字符串传递到我的 alertview
- 从 JSON 响应中获取多个字符串(例如,在 AlertView 中打印:"The password field is required.next lineThe username field is required.")
这是我的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
你可以这样做,
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 的消息。
希望这会有所帮助:)
首先确定
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]
}
这应该将数据传递给下一个方法:)