JSON

Swift JSON教程:使用JSON(3)

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

保存文件,可以看到我们成功地拿到了 app 名字,但这次的办法要优雅得多了: App(name: Game of War - Fire Age, link: https://itunes.apple.com/us/app/game-of-war-fire-age/id667728512?mt=8uo=2) 注意:如果在

保存文件,可以看到我们成功地拿到了 app 名字,但这次的办法要优雅得多了:

App(name: "Game of War - Fire Age", link: "https://itunes.apple.com/us/app/game-of-war-fire-age/id667728512?mt=8&uo=2")

注意:如果在这里出现错误,说 topapps.json 不能打开,那可能是没有权限,请关闭开始项目,然后删除 derived data 文件夹中的内容。

我们已经知道如何解析本地数据——要怎样解析远程数据呢?

抓取远程 JSON

让这个项目更完美些。通常我们需要抓取远程数据而不是本地文件。我们可以用一个网络请求抓取 App Store 的排行榜。

打开 DataManager.swift ,在 DataManager 的实现之前定义一个 topAppURL:

let topAppURL = "https://itunes.apple.com/us/rss/topgrossingipadapplications/limit=25/json"

然后,在实现部分添加这个方法:

public class func getTopAppsDataFromItunesWithSuccess(success: @escaping ((_ iTunesData: Data) -> Void)) { //1 loadDataFromURL(url: URL(string: topAppURL)!) { (data, error) -> Void in //2 if let data = data { //3 success(data) } } }

这个方法和之前的方法很相似,但这次使用了 URLSession 从 iTunes 抓取数据。代码解释如下:

  • 首先调用 loadDataFromURL 方法,这个方法有一个 URL 参数和一个完成闭包,闭包有一个 Data 对象。
  • 用一个可空绑定确保 data 不为空。
  • 将 data 传递到 success 闭包,和之前一样。
  • 打开主 playground 文件,将这句 :

    DataManager.getTopAppsDataFromFileWithSuccess { (data) -> Void in

    替换为:

    DataManager.getTopAppsDataFromItunesWithSuccess { (data) -> Void in

    现在你可以从 iTunes 获得数据了。

    保存文件,你可以查看当前最热门的游戏是什么了。我看到的仍然是 “Saga 糖果消除”。我真的喜欢糖果消除游戏。

    App(name: "Candy Crush Saga", link: "https://itunes.apple.com/us/app/candy-crush-saga/id553834731?mt=8&uo=2")

    你看到的可能和上面不同,因为苹果商店里的排行榜随时都在变。

    通常人们不仅仅对排行榜的第一名感兴趣——他们会想了解整个排行榜的内容。你没有必要为此写码——只需要用这句:

    topApps.feed?.entries Gloss 的底层机制

    如你所见,在解析 JSON 数据时 Gloss 很好用,但它的底层机制是怎样的呢?

    <~~ 是一个自定义操作符,用来执行一系列 Decoder.decode 函数。Gloss 内置了对许多类型的解码支持:

  • 简单类型 (Decoder.decode(key:))
  • Decodable 模型对象 (Decoder.decode(decodableForKey:))
  • 简单数组 (Decoder.decode(key:))
  • Decodable 模型数组 (Decoder.decode(decodableArrayForKey:) )
  • 枚举类型 (Decoder.decode(enumForKey:))
  • 枚举数组 (Decoder.decode(enumArrayForKey:) )
  • URL 类型 (Decoder.decode(urlForKey:) )
  • URL 数组 (Decode.decode(urlArrayForKey:))
  • 在本教程中,你严重依赖 Decodable 模型。如果你需要更复杂的对象,你可以扩展 Decoder 并实现你自己的解码功能。

    当然 Gloss 还能将对象转换回 JSON。如果你想了解这部分内容,请参考 Encodable 协议。

    结束

    这里 下载完成的 playground 项目。

    如果你更愿意采用本文前半部分描述的苹果的解析方式,你可以看一下苹果的 在 Swift 中使用 JSON 。它最终演示了一个如何编写使用 JSON 数据的网络层的实例非常有用。

    但是,如果你更喜欢 Gloss 的方法,则需要密切关注它的新版本发布,因为它还在开发阶段。


    分享给小伙伴们:

    本文标签: Swift,JSON/">Swift,JSON

    相关文章

    发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

  • 本类最热新闻

  •  

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

    相关文章
    • JSON教程、使用手册

      JSON教程、使用手册

      2017-05-16 17:04

    • Swift JSON 教程:使用 JSON

      Swift JSON 教程:使用 JSON

      2017-05-15 17:03

    • ABAP 中JSON格式的变换与解析

      ABAP 中JSON格式的变换与解析

      2017-05-14 16:02

    • JSONObject使用方法详解

      JSONObject使用方法详解

      2017-05-14 14:00

    网友点评
    >