无法将 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)
    }
}