JSON

Swift语言中如何使用JSON数据教程

字号+ 作者:H5之家 来源:H5之家 2017-07-05 17:00 我要评论( )

Swift语言中如何使用JSON数据教程

这是一篇翻译文章,原文出处:

Swift语言中如何使用JSON数据教程

JSON(全称:JavaScript Object Notation),是网络服务中传输数据的常用方法,JSON因为容易使用,且可读性强, 所以非常受到欢迎。

下面是个JSON的一个片段:

[ {: {:,:}}, {: {:,:}} ]

在objective-c 中解析JSON数据相当的简单:

NSString *age = json[][]; NSLog(, age);

但在更加现代化的语言swift中, 因为optionals数据类型的原因,JSON数据解析起来反而要麻烦。

if let item = json[0] { ] { ] { println(age) } } }

上面的代码中,每从JSON数据中解析一次就需要通过optional binding检查,这可以让代码更加安全,但也让解析工作变得复杂,如果解析饿更复杂的jsons代码变的冗余。

我们开始一个例子

下载 例子开始程序项目 。这个程序是为了获取App Store中top25的app.

里面有几个文件

TopApps.json:包含用于json解析的文件

AppModel:代表应用类

DataManager:获取本地和远程数据类,使用这个文件里的方法加载JSON数据。

viewController :目前是空的,待会我门在里面写入代码。

原生的解析JSON数据的方法

在viewController.swift文件中的viewDidLoad()方法添加如下代码:

DataManager.getTopAppsDataFromFileWithSuccess { (data) -> Void in // 使用optional binding and NSJSONSerialization类获取排名第一的app //1 var parseError: NSError? let parsedObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error:&parseError) let topApps = parsedObject as? NSDictionary { ] as? NSDictionary { ] as? NSArray { if let firstApp = apps[0] as? NSDictionary { ] as? NSDictionary { ] as? NSString { //3 println() } } } } } } }

运行后的结果:

Optional Binding: Clash of Clans

结合SwiftJSON第三方框架解析JSON数据

首先在github下载SwiftJSON,地址: https://github.com/lingoer/SwiftyJSON 然后 下载文件解压,然后将目录中的SwiftJSON.swfit拷贝到项目目录里。

替换viewDidLoad()内容:

override func viewDidLoad() { super.viewDidLoad() DataManager.getTopAppsDataFromFileWithSuccess { (data) -> Void let json = JSON(data: data) ][][][].string { println() } } }

我们注意首先json()初始化data,并转换成JSON对象

使用SwiftJSON的好处是,它处理了所有的optional数据类型的检查,我们只需要知道json数据的key和索引后,其他就可以交给 SwiftJSON来处理。

在上面的代码中,我门还使用了string方法获取string 值, SwiftJSON还有个arrayValue来获取数组。

运行结果:

SwiftyJSON: Clash of Clans

获取远程JSON数据

在DataManager.swift中添加下列方法:

class func getTopAppsDataFromItunesWithSuccess(success: ((iTunesData: NSData!) -> Void)) { //1 loadDataFromURL(NSURL(let urlData = data { //3 success(iTunesData: urlData) } }) }

然后在viewController.swfit 中viewDidLoad()添加如下方法:

//从iTunes and 并通过SwiftyJSON获取排名第一的app

DataManager.getTopAppsDataFromItunesWithSuccess { (iTunesData) -> Void in let json = JSON(data: iTunesData) ][][][].string { println() } // More soon... }

运行结果:

wiftyJSON: Clash of Clans NSURLSession: Clash of Clans 解析JSON到array数组 在viewController中More soon 后添加如下内容: let appArray = json[][].arrayValue { //2 var apps = [AppModel]() appDict in appArray { var appName: String? = appDict[][].stringValue var appURL: String? = appDict[][].stringValue var app = AppModel(name: appName, appStoreURL: appURL) apps.append(app) } //4 println(apps) }

从JSON 数据中遍历并保存到类型为appModel的apps数组中。

运行程序: 

在真实的程序中,我们会通过UITableView或者UICollectionView显示数据。

这就是使用原生类和第三方类库SwfitJSON解析JSON数据的方法。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 如何学习 webpack

    如何学习 webpack

    2017-06-13 16:04

  • 如何解析域名 如何解析json数据

    如何解析域名 如何解析json数据

    2017-06-06 11:01

  • [前端]如何使用 Python 处理 JSON 数据(译) 技术学习小组

    [前端]如何使用 Python 处理 JSON 数据(译) 技术学习小组

    2017-05-31 15:00

  • 如何把dedecms数据生成json

    如何把dedecms数据生成json

    2017-05-30 18:03

网友点评
o