ios - 将 JSON 数组解包为字符串值时遇到问题

标签 ios json swift swifty-json

这几天我一直在与 JSON 斗争。我正在尝试向我的网络服务器创建一个 POST 请求以获取用户名,该请求将返回有关该用户的信息。我已设法通过两种方式获取 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)
    }
}

关于ios - 将 JSON 数组解包为字符串值时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30925230/

相关文章:

ios - AVPlayerLayer 在隐藏 Controller 中进入背景并进入前景并显示后空白

ios - 如何让 UIAlertView 自动消失?

php - 如何创建 JSON 对象

swift - 参数标签错误

ios - 在 Swift 中将全局字符串存储在 iOS 中以供应用程序范围使用

swift - 为复杂的tableHeaderView添加Search Bar和Search Display Controller时,UISearchBar获得焦点后消失

ios - Xcode 上传二进制 Apple 的 Web 服务操作不成功

Javascript - 根据设备更改按钮图像

c# - 使用 DataContractJsonSerializer 将对象序列化为 json 数组

php - 如何实现数据库数据悬停动态描述显示?