使用字典和字典数组进行Swift JSON解析

巴韦恩

我是使用Swift语言进行iOS开发的初学者。我有一个JSON文件,其中包含以下数据。

{
    "success": true,
    "data": [
             {
                 "type": 0,
                 "name": "Money Extension",
                 "bal": "72 $",
                 "Name": "LK_Mor",
                 "code": "LK_Mor",
                 "class": "0",
                 "withdraw": "300 $",
                 "initval": "1000 $"
             },
             {

             },
             {

             },
             ]
}   

我想解析此文件,并且必须返回包含JSON文件中数据的字典。这是我写的方法。

enum JSONError: String, ErrorType {
    case NoData = "ERROR: no data"
    case ConversionFailed = "ERROR: conversion from JSON failed"
}

func jsonParserForDataUsage(urlForData:String)->NSDictionary{
    var dicOfParsedData :NSDictionary!
    print("json parser activated")
    let urlPath = urlForData
    let endpoint = NSURL(string: urlPath)
    let request = NSMutableURLRequest(URL:endpoint!)
            NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) -> Void in
                do {

                    guard let dat = data else {
                        throw JSONError.NoData
                    }
                    guard let dictionary: NSDictionary = try NSJSONSerialization.JSONObjectWithData(dat, options:.AllowFragments) as? NSDictionary else {
                        throw JSONError.ConversionFailed
                    }

                    print(dictionary)
                    dicOfParsedData = dictionary

                } catch let error as JSONError {
                    print(error.rawValue)
                } catch {
                    print(error)
                }
                }.resume()

          return dicOfParsedData

}

当我修改此方法以返回字典时,它总是返回nil。如何修改此方法。

埃里克·艾雅(Eric Aya)

您不能return执行异步任务。您必须改用回调。

添加这样的回调:

completion: (dictionary: NSDictionary) -> Void

解析器方法签名:

func jsonParserForDataUsage(urlForData: String, completion: (dictionary: NSDictionary) -> Void)

并在您要“返回”的数据可用的地方调用补全:

func jsonParserForDataUsage(urlForData: String, completion: (dictionary: NSDictionary) -> Void) {
    print("json parser activated")
    let urlPath = urlForData
    guard let endpoint = NSURL(string: urlPath) else {
        return
    }
    let request = NSMutableURLRequest(URL:endpoint)
    NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) -> Void in
        do {

            guard let dat = data else {
                throw JSONError.NoData
            }
            guard let dictionary = try NSJSONSerialization.JSONObjectWithData(dat, options:.AllowFragments) as? NSDictionary else {
                throw JSONError.ConversionFailed
            }

            completion(dictionary: dictionary)

        } catch let error as JSONError {
            print(error.rawValue)
        } catch let error as NSError {
            print(error.debugDescription)
        }
    }.resume()

}

现在,您可以将此方法与结尾的闭包一起使用,以获取“返回的”值:

jsonParserForDataUsage("http...") { (dictionary) in
    print(dictionary)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用字典解析此JSON?

来自分类Dev

Alamofire:使用字典数组发送JSON

来自分类Dev

使用 Spark 从 JSON 解析字典数组

来自分类Dev

Swift:解析JSON字典值

来自分类Dev

使用字典生成json

来自分类Dev

在 Swift 3 中解析字典数组的字典

来自分类Dev

将Json数组中的对象解析为字典Swift

来自分类Dev

在iOS中解析json的字典数组

来自分类Dev

使用字典格式化 JSON

来自分类Dev

使用SwiftyJSON获取JSON解析字典的键

来自分类Dev

使用Swift解析JSON

来自分类Dev

Swift:从JSON数组的内部项创建字典

来自分类Dev

在Swift中解析JSON字典中的无符号整数

来自分类Dev

在Swift中解析JSON字典中的无符号整数

来自分类Dev

如何快速解析和存储json字典中的整数值?

来自分类Dev

如何快速解析和存储json字典中的整数值?

来自分类Dev

使用NSJSONSerialization解析具有多个数组的JSON字典不会导致NSDictionary或NSArray

来自分类Dev

Dask如何使用字典列表打开json

来自分类Dev

我如何使用 swift 3 解析这个 JSON 复杂的深度字典数据

来自分类Dev

使用 Swift 3 进行 JSON 解析

来自分类Dev

使用 Swift 4 进行 JSON 解析

来自分类Dev

在Swift中解析JSON数组

来自分类Dev

Swift JSON 解析访问数组

来自分类Dev

使用jq和filter进行JSON解析

来自分类Dev

从MVC中的JSON字典解析键/值对

来自分类Dev

如何快速解析带有字典的json?

来自分类Dev

在列表 Python 3.6 中解析 JSON 字典

来自分类Dev

解析Json数组和对象

来自分类Dev

使用Ruby和SmarterCSV解析JSON数组