快速解析双 JSON 编码数组并访问它

Posted

技术标签:

【中文标题】快速解析双 JSON 编码数组并访问它【英文标题】:Parsing a double JSON encoded array in swift and accessing it 【发布时间】:2015-05-15 15:57:56 【问题描述】:

我需要将一个数组中的 10 个数组从 JSON 解析为 swift 并访问它。我可以通过 REST API 获取数据并在控制台上打印出来,但我不知道如何实际保存它以进行处理。

JSON 数组结构:

[[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge], 
[lol_id, lol_time, lol_uid, lol_username, lol_type, lol_url, lol_title, lol_score, lol_comments, lol_badge]]

这些数组基本上返回整数和字符串。

如何以相同的样式保存这些(数组中的数组)并访问它们?

这是我到现在为止的代码:

@IBAction func buttonLoad(sender: AnyObject) 

    // Setting up the URL 
    let myUrl = NSURL(string: "http://hugelol.com/api/front.php");

    // Request 
    let request = NSMutableURLRequest(URL:myUrl!);
    request.HTTPMethod = "POST";

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) 
        data, response, error in

        if error != nil
        
            println("error=\(error)")
            return
        

        // Prints server response
        println("response = \(response)")

        // Prints the double array 
        let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("responseString = \(responseString)")
    
    task.resume()

我尝试了许多不同的方法,但很难理解如何做到这一点。我也尝试过 swiftyJSON,但我仍然不知道如何将数据保存到 swift 数组中。我差点把头撞到墙上。感谢您的阅读。

【问题讨论】:

我有这样的结果 SwiftyJSON let str = "[[Lol, Lol, Lol], [Lol, Lol, Lol]]"; let data = JSON(str); println(data); // [[Lol, Lol, Lol], [Lol, Lol, Lol]] 【参考方案1】:

这部分代码应该提供给你预期的结果

....

    // Setting up the URL
    let myUrl = NSURL(string: "http://hugelol.com/api/front.php");

    // Request
    let request = NSMutableURLRequest(URL:myUrl!);
    request.HTTPMethod = "POST";

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) 
        data, response, error in

        if error != nil
        
            println("error=\(error)")
            return
        

        if let jsonString = JSON(data: data).rawString() as String? 
            if let dataFromString = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) 
                let json = JSON(data: dataFromString)
// uncomment necessary access method                   
//                    for (index: String, subJson: JSON) in json 
//                        println("Arr = \(subJson)")
//                    
// OR
//                    println(json[0][0])

            
        
    

    task.resume()        

....

【讨论】:

谢谢,这会打印出实际的数组。但是,我希望以 json[0][0] 形式从中提取单个值,例如,该形式为我提供了第一个数组中的第一项。 我明白你的意思了。实际上响应不是 JSON 数据,它只是带有值的数组。 JSON 有 "key": "value" 格式 有趣。我认为我的数据可能有问题:当我尝试打印某些内容时,例如:let json = JSON(data: data) let items = json[0][0] println(items) 它只是返回了nullnil。我将研究如何解决这个问题,但我觉得这可能是一个很大的痛苦。有什么建议可以减轻我的痛苦吗? 我有一个数组,让我检查一下 现在检查一下,我不知道为什么需要双重处理,但它可以工作【参考方案2】:

尝试使用 NSJSONSerialization。它将解析 JSON 并返回一个 NSObject 树。

if let result: AnyObject = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(0), error: nil) ...

【讨论】:

如何使用返回的 NSObject 树“结果”?

以上是关于快速解析双 JSON 编码数组并访问它的主要内容,如果未能解决你的问题,请参考以下文章

python json快速解析命令

Swift JSON 解析访问数组

如何在 javascript 中访问多维 PHP 数组作为 json 编码的变体?

如何将带单引号的字符串转换为双引号以进行 json 解析

如何在json中编码php数组并解析成jquery

快速解析 JSON 数组,对其进行排序并找到重叠的日期