用于解析 JSON 并返回字典数组的 Swift 函数

Posted

技术标签:

【中文标题】用于解析 JSON 并返回字典数组的 Swift 函数【英文标题】:Swift Function to parse JSON and return a array of dictionaries 【发布时间】:2016-07-31 11:05:48 【问题描述】:

我尝试编写一个函数来解析 JSON。该函数的返回值是字典的array。不幸的是,我的问题是分配result = data as! [[String:AnyObject]] 不起作用。 print(data) 返回我的 JSON 精彩,但 print(result) 只返回一个空数组。令人惊讶的是方法print(result) 先运行然后方法print(data)运行。

我尝试过的代码:

import Foundation
import Alamofire
import SwiftyJSON

func getPlayers() -> Array<Dictionary<String, AnyObject>>  

    var result = [[String:AnyObject]]()

    Alamofire.request(.GET, "http://example.com/api/v1/players", parameters: ["published": "false"])
        .responseJSON  (responseData) -> Void in
            if((responseData.result.value) != nil) 
                let response = JSON(responseData.result.value!)

                if let data = response["data"].arrayObject 
                    print(data)
                    result = data as! [[String:AnyObject]]
                
            
    

    print(result)

    return result

【问题讨论】:

【参考方案1】:

API 调用以 async(在后台)方式工作,这就是为什么您需要使用 swift closure 而不是返回 dictionary。像这样更改您的代码

func getPlayers(completion: (Array<Dictionary<String, AnyObject>>) -> ()))  

    var result = [[String:AnyObject]]()

    Alamofire.request(.GET, "http://example.com/api/v1/players", parameters: ["published": "false"])
        .responseJSON  (responseData) -> Void in
            if((responseData.result.value) != nil) 
                let response = JSON(responseData.result.value!)
                if let data = response["data"].arrayObject 
                    print(data)
                    result = data as! [[String:AnyObject]]
                
            
            completion(result)
     

然后这样调用

self.getPlayers()  (result) -> () in
     print(result)

【讨论】:

以上是关于用于解析 JSON 并返回字典数组的 Swift 函数的主要内容,如果未能解决你的问题,请参考以下文章

解析 JSON 字典 Swift5

swift 3中从数组到字典的JSON解析问题

Swift 4 解析 1+n 数量的 json 数字键

Swift - JSON解码返回空数组

使用 Alamofire 解析字典中的 json 对象 [关闭]

在 Swift 中解码 JSON API - 重复的结构名称