无法将 JSON 数组解包为字符串值
Trouble unwrapping JSON Array to a String Value
几天来,我一直在为 JSON 苦苦挣扎。我正在尝试向我的 Web 服务器创建一个 POST 用户名请求,这将 return 所述用户的信息。我已经设法通过两种方式获得 JSON 响应,但我无法将数组的任何元素转换为字符串。我也在用 SWIFTYJSON API。
import UIKit
import Foundation
class ViewController: UIViewController {
var token = "barrymanilow"
var endPoint = "http://www.never.money/simple_app7.php"
@IBOutlet weak var firstLabel: UILabel!
override func viewDidLoad() {
submitAction(self)
}
func submitAction(sender: AnyObject) {
let myUrl = NSURL(string: "http://www.mindyour.money/simple_app7.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
// Compose a query string
let postString = "token=\(token)";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if error != nil{
println("error=\(error)")
return
}
// Print out response body
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("responseString = \(responseString)")
//Let's convert response sent from a server side script to a NSDictionary object:
var err: NSError?
var myJSON = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSArray
var json : JSON = JSON(data: data)
let results: AnyObject? = myJSON?.valueForKey("player_username")
println("\(results)")
let result2 = json["player_username"].string
}
task.resume()
}
}
但是,这似乎不起作用,有人可以帮助我吗?
我看到在使用 NSJSONSerialization
时,您将 JSON 响应转换为 NSArray,例如,使用 SwiftyJSON 获取第一个项目的 player_username
你会这样做:
let result2 = json[0]["player_username"].string
无需先将 json[0]
转换为字典,它就可以工作,因为多亏了 SwiftyJSON,编译器知道 json[0]
是字典。
如果由于某种原因json[0]
不能自动订阅,你可以这样做:
let playerOneDic = json[0].dictionary
let result2 = playerOneDic["player_username"].string
否则,如果没有 SwiftyJSON,您将不得不这样做:
if let playerOne = myJSON?[0] as? [String:AnyObject] {
if let username = playerOne["player_username"] as? String {
println(username)
}
}
几天来,我一直在为 JSON 苦苦挣扎。我正在尝试向我的 Web 服务器创建一个 POST 用户名请求,这将 return 所述用户的信息。我已经设法通过两种方式获得 JSON 响应,但我无法将数组的任何元素转换为字符串。我也在用 SWIFTYJSON API。
import UIKit
import Foundation
class ViewController: UIViewController {
var token = "barrymanilow"
var endPoint = "http://www.never.money/simple_app7.php"
@IBOutlet weak var firstLabel: UILabel!
override func viewDidLoad() {
submitAction(self)
}
func submitAction(sender: AnyObject) {
let myUrl = NSURL(string: "http://www.mindyour.money/simple_app7.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
// Compose a query string
let postString = "token=\(token)";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request){
data, response, error in
if error != nil{
println("error=\(error)")
return
}
// Print out response body
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("responseString = \(responseString)")
//Let's convert response sent from a server side script to a NSDictionary object:
var err: NSError?
var myJSON = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSArray
var json : JSON = JSON(data: data)
let results: AnyObject? = myJSON?.valueForKey("player_username")
println("\(results)")
let result2 = json["player_username"].string
}
task.resume()
}
}
但是,这似乎不起作用,有人可以帮助我吗?
我看到在使用 NSJSONSerialization
时,您将 JSON 响应转换为 NSArray,例如,使用 SwiftyJSON 获取第一个项目的 player_username
你会这样做:
let result2 = json[0]["player_username"].string
无需先将 json[0]
转换为字典,它就可以工作,因为多亏了 SwiftyJSON,编译器知道 json[0]
是字典。
如果由于某种原因json[0]
不能自动订阅,你可以这样做:
let playerOneDic = json[0].dictionary
let result2 = playerOneDic["player_username"].string
否则,如果没有 SwiftyJSON,您将不得不这样做:
if let playerOne = myJSON?[0] as? [String:AnyObject] {
if let username = playerOne["player_username"] as? String {
println(username)
}
}