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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 原文:Swift语言中如何使用JSON数据教程这是一篇翻译文章,原文出处:http://www.raywenderlich.com/82706/working-with-json-in-swift-tutorial   Swift语言中如何使用JSON数据教程   JSON(全称:JavaScript Object Notation),是网络服务中传输数据的常用方法,JSON因为容易使用,且可读性强, 所以非常受到欢迎。
原文: Swift语言中如何使用JSON数据教程

这是一篇翻译文章,原文出处:http://www.raywenderlich.com/82706/working-with-json-in-swift-tutorial

 

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

 

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

 

下面是个JSON的一个片段:

[

  {"person": {"name":"Dani","age":"24"}},

  {"person": {"name":"ray","age":"70"}}

]

 

 

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

NSString *age = json[0][@"person"][@"age"];

NSLog(@"Dani's age is %@", age);

 

 

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

if let item = json[0] {

  if let person = item["person"] {

    if let age = person["age"] {

      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)

 

  //2

  if let topApps = parsedObject as? NSDictionary {

    if let feed = topApps["feed"] as? NSDictionary {

      if let apps = feed["entry"] as? NSArray {

        if let firstApp = apps[0] as? NSDictionary {

          if let imname = firstApp["im:name"] as? NSDictionary {

            if let appName = imname["label"] as? NSString {

              //3

              println("Optional Binding: \(appName)")

            }

          }

        }

      }

    }

  }

}

 

 

运行后的结果:

 

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 in

    // 使用SwiftyJSON 获取排名第一的app

    let json = JSON(data: data)

    if let appName = json["feed"]["entry"][0]["im:name"]["label"].string {

      println("SwiftyJSON: \(appName)")

    }

  }

}

 

 

我们注意首先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(string: TopAppURL)!, completion:{(data, error) -> Void in

      //2

      if let urlData = data {

        //3

        success(iTunesData: urlData)

      }

  })

}

 

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

 

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

DataManager.getTopAppsDataFromItunesWithSuccess { (iTunesData) -> Void in

  let json = JSON(data: iTunesData)

  if let appName = json["feed"]["entry"][0]["im:name"]["label"].string {

    println("NSURLSession: \(appName)")

  }

  // More soon...

}

 

 

运行结果:

 

wiftyJSON: Clash of Clans

NSURLSession: Clash of Clans

 

 

 

 

解析JSON到array数组

 

在viewController中More soon  后添加如下内容:

 

//1

if let appArray = json["feed"]["entry"].arrayValue {

  //2

  var apps = [AppModel]()

 

  //3

  for appDict in appArray {

    var appName: String? = appDict["im:name"]["label"].stringValue

    var appURL: String? = appDict["im:image"][0]["label"].stringValue

 

    var app = AppModel(name: appName, appStoreURL: appURL)

    apps.append(app)

  }

 

  //4

  println(apps)

}

 

 

 

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

 

运行程序: 

 

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

 

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

 

目录
相关文章
|
1月前
|
机器学习/深度学习 TensorFlow Swift
Swift语言适合多个领域的开发
Swift语言适合多个领域的开发
61 9
|
1月前
|
监控 安全 Swift
企业上网行为管理软件:Swift 语言在移动终端监控的拓展
在数字化时代,企业对员工移动终端的上网行为管理日益重视。Swift 语言在移动终端监控中展现出独特优势,包括网络状态监测、应用使用跟踪及网页浏览行为监控等功能,有效助力企业确保信息安全和提高工作效率。
32 6
|
1月前
|
JSON JavaScript 前端开发
Go语言中json序列化的一个小坑,建议多留意一下
在Go语言开发中,JSON因其简洁和广泛的兼容性而常用于数据交换,但其在处理数字类型时存在精度问题。本文探讨了JSON序列化的一些局限性,并介绍了两种替代方案:Go特有的gob二进制协议,以及msgpack,两者都能有效解决类型保持和性能优化的问题。
53 7
|
1月前
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
44 4
|
1月前
|
机器学习/深度学习 人工智能 移动开发
Swift语言作为苹果公司推出的现代编程语言
Swift语言作为苹果公司推出的现代编程语言
38 8
|
1月前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
53 9
|
1月前
|
机器学习/深度学习 安全 数据挖掘
Swift语言的应用场景非常广泛
Swift语言的应用场景非常广泛
36 4
|
1月前
|
安全 Swift iOS开发
Swift语言
Swift语言
30 4
|
1月前
|
编译器 Swift iOS开发
Swift 教程
10月更文挑战第23天
17 1
|
1月前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。