[快速学会Swift第三方库] SwiftyJSON篇

[快速学会Swift第三方库] SwiftyJSON篇

SwiftyJSON使得用Swift处理JSON数据更加容易。这是解析JSON字符串封装类。实现功能与Javascript中的JSON.parse相近,使用方便。

目录

  • 快速学会Swift第三方库 SwiftyJSON篇
    • 目录
    • 编码之前
      • 导入SwiftyJSON
      • 其他操作
    • 解析本地JSON
      • 示例JSON
      • 示例代码
      • 运行结果
    • 解析网络JSON
      • 示例JSON
      • 示例代码
      • 运行结果
    • 深入学习

编码之前

导入SwiftyJSON

推荐使用CocoaPods进行导入,CocoaPods是一个负责管理iOS项目中第三方开源库的工具,安装CocoaPods之后使用命令行就能轻松地对所有第三方开源库进行安装和更新,而不需要每次上GitHub去下载。
CocoaPods的安装过程传送门:iOS 9 导入类库全面详尽过程(Ruby安装->CocoaPods安装->导入类库)
手动下载:GitHub-SwiftyJSON主页

装好CocoaPods后,修改Podfile文件内容为如下:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!

target 'Web' do
pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git'
end
xcodeproj 'Desktop/Web/Web.xcodeproj'

target后面为工程名,最后一行为工程路径(这里的Web是我的工程名)

再执行命令:

$ pod install

其他操作

在Target->工程名->Build Settings->Search Paths->User Header Search Paths处添加SwiftyJSON所在的目录:

最后在你需要用到SwiftyJSON的类中加上:

import SwiftyJSON

解析本地JSON

示例JSON

创建一个本地文档“Notes.json”用于测试

{"ResultCode":0,"Record":[
{"ID":"1","Date":"2016-5-23","Content":"策划","UserID":"summer"},
{"ID":"2","Date":"2016-5-24","Content":"研发","UserID":"summer"},
{"ID":"3","Date":"2016-5-25","Content":"研发","UserID":"summer"},
{"ID":"4","Date":"2016-5-26","Content":"测试","UserID":"summer"},
{"ID":"5","Date":"2016-5-27","Content":"发布","UserID":"summer"}]}

示例代码

    func jsonFromData() {
        let path = NSBundle.mainBundle().pathForResource("Notes", ofType: "json")!
        let json = JSON(data: NSData(contentsOfFile: path)!)

        //从JSON Dictionary中获取key为ResultCode的int值
        let resultCode = json["ResultCode"].int!
        print("ResultCode:\(resultCode)")

        let array = json["Record"]
        //从JSON Array中进行循环解析
        for (index,subJson):(String,JSON) in array {

            let userId = subJson["UserID"].string!
            let content = subJson["Content"].string!
            let date = subJson["Date"].string!

            print("\(index):\(userId) will do \(content) at \(date)")
        }
    }

运行结果

ResultCode:0
0:summer will do 策划 at 2016-5-23
1:summer will do 研发 at 2016-5-24
2:summer will do 研发 at 2016-5-25
3:summer will do 测试 at 2016-5-26
4:summer will do 发布 at 2016-5-27

解析网络JSON

示例JSON

这里可以使用Alamofire提供的测试接口

https://httpbin.org/get

在浏览器中打开该地址可以看到:

{
  "args": {},
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
    "Cache-Control": "max-age=0",
    "Host": "httpbin.org",
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:46.0) Gecko/20100101 Firefox/46.0"
  },
  "origin": "202.115.52.205",
  "url": "https://httpbin.org/get"
}

示例代码

用苹果自带的NSURLSession进行网络请求,关于网络请求的问题,可以参考Swift学习笔记(3)iOS 9 中的网络请求

func jsonFromNetworking()  {
        var strURL = "https://httpbin.org/get"
        //等价于strURL=strURL.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
        strURL = strURL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet(charactersInString: "`#%^{}\"[]|\\<>").invertedSet)!

        let url = NSURL(string: strURL)!
        let request = NSURLRequest(URL: url)

        let session = NSURLSession.sharedSession()
        let dataTask = session.dataTaskWithRequest(request) { (data, response, error) in
            if (error != nil){
                NSLog("Error:\(error?.localizedDescription)")
            }
            else{
                let json = JSON(data: data!)
                //从JSON Dictionary中获取key为headers的JSON Dictionary,再从其中获取key为Host的string值
                let host = json["headers","Host"].string!
                let origin = json["origin"].string!
                print("host:\(host),origin:\(origin)")
            }
        }
        dataTask.resume()
    }

或者用第三方库Alamofire进行网络请求,关于Alamofire的问题,可以参考[快速学会Swift第三方库] Alamofire篇

func jsonFromNetworkingByAlamofire() {
        Alamofire.request(.GET, "https://httpbin.org/get")
            .responseJSON { (response) in
                switch response.result{
                case .Success:
                    if let value = response.result.value{
                        let json = JSON(value)
                        let host = json["headers","Host"].string!
                        let origin = json["origin"].string!
                        print("host:\(host),origin:\(origin)")

                    }
                case .Failure(let error):
                    print(error)
                }
        }
    }

运行结果

host:httpbin.org,origin:202.115.52.205

深入学习

这里只列出了最基本的JSON解析方式,如果你希望能够更加深入地学习SwiftyJSON,可以前往GitHub-SwiftyJSON主页 ! 如果你想了解苹果自带的JSON解析方式NSJSONSerialization,可以参考Swift学习笔记(2)网络数据交换格式(XML,JSON)解析

时间: 2024-11-08 21:15:13

[快速学会Swift第三方库] SwiftyJSON篇的相关文章

[快速学会Swift第三方库] HanekeSwift篇

[快速学会Swift第三方库] HanekeSwift篇 Haneke是一个轻量级的缓存,为UIImage,JSON,NSData,String提供记忆和LRU磁盘缓存. 目录 快速学会Swift第三方库 HanekeSwift篇 目录 编码之前 导入HanekeSwift 其他操作 使用缓存 NSData 示例代码 运行结果 JSON 测试接口 示例代码 运行结果 UIImage和String UIImage的拓展用法 示例代码 运行结果 fetcher的其他用法 深入学习 编码之前 编码之前

[快速学会Swift第三方库] Eureka篇

[快速学会Swift第三方库] Eureka篇 Eureka可以帮你简单优雅的实现动态table-view表单.它由rows,sections和forms组成.如果你的app包含大量表单,Eureka可以真正帮你节省时间. 目录 快速学会Swift第三方库 Eureka篇 目录 编码之前 导入 Eureka 其他操作 创建表单 基础表单 选择类型表单 Segment风格选择器 标准选择器 pickerView风格选择器 三种风格选择器效果对比 带输入框的表单 自定义Row 深入学习 编码之前 导

[快速学会Swift第三方库] Alamofire篇

[快速学会Swift第三方库] Alamofire篇 Alamofire是 Swift 语言的 HTTP 网络开发工具包,AFNetworking的 Swift 版,使用起来相当简单. 目录 快速学会Swift第三方库 Alamofire篇 目录 编码之前 导入Alamofire 其他操作 Web请求 示例代码 运行结果 数据请求JSON 示例代码 运行结果 上传文件 示例代码 运行结果 下载文件 示例代码 运行结果 深入学习 编码之前 导入Alamofire 推荐使用CocoaPods进行导入

[快速学会Swift第三方库] Kingfisher篇

[快速学会Swift第三方库] Kingfisher篇 Kingfisher是一个轻量的下载和缓存网络图片库.下载和缓存是异步进行操作,已经下载好的图片会缓存在内存和本地,极大得提高app的体验. 目录 快速学会Swift第三方库 Kingfisher篇 目录 编码之前 导入 Kingfisher 其他操作 基础操作 使用optionsInfo参数 回调函数 取消任务 下载器 缓存系统 预取 动态图片 深入学习 编码之前 导入 Kingfisher 推荐使用CocoaPods进行导入,Cocoa

[快速学会Swift第三方库] Cartography篇

[快速学会Swift第三方库] Cartography篇 Cartography 是用来声明 Swift 中的 Auto Layout,无需输入任何 stringly 就可设置自己 Auto Layout 的约束声明. 目录 快速学会Swift第三方库 Cartography篇 目录 编码之前 导入 Cartography 其他操作 基本约束 示例代码 运行结果 替换约束 示例代码 运行结果 复合约束与对齐 示例代码 运行结果 边距 示例代码 运行结果 深入学习 编码之前 导入 Cartogra

[快速学会Swift第三方库] SQLite.swift篇

[快速学会Swift第三方库] SQLite.swift篇 SQLite.swift 是一个使用纯 Swift 语言封装 SQLite3 的操作框架. 特性: 简单的查询和参数绑定接口 安全.自动类型数据访问 隐式提交和回滚接口 开发者友好的错误处理和调试 文档完善 通过广泛测试 目录 快速学会Swift第三方库 SQLiteswift篇 目录 编码之前 导入SQLiteswift 其他操作 链接数据库 创建表 插入数据 查询数据 修改数据 删除数据 深入学习 编码之前 导入SQLite.swi

[快速学会Swift第三方库]AlamofireObjectMapper

[快速学会Swift第三方库]AlamofireObjectMapper篇 通常网络请求返回的是JSON数据,使用ObjectMapper可以让JSON数据直接转化为对象,而使用Alamofire进行网络请求时,使用AlamofireObjectMapper可以直接返回对象,更加简洁. Alamofire的使用:[快速学会Swift第三方库] Alamofire篇 ObjectMapper在非Alamofire请求下的使用:GitHub-ObjectMapper主页 目录 快速学会Swift第三

React Native常用第三方库

前言 React Native出来一年多了,受到各大开发人员的喜爱,但是由于只是专注于View层的开发,因此在很多深层次上还需要结合原生app做一定的兼容,还有就是现在好多控件,如Android中已是系统的控件的sidemenu.checkbox.gridview等,这些在react native中 系统是没有给我们提供的,这时候就借助了第三方开源的力量. 那么我们今天说说在React Native项目开发中常见的一些第三方库. 常见的第三方库 组件篇 CheckBox(多选按钮) react-

Swift - CocoaPods的安装使用详解(自动安装管理第三方库)

我们开发的时候,常常需要引入一些第三方库(比如:Alamofire.SwiftyJSON 等等).过去的做法是把这些库下载下来,并引入到工程中.如果有依赖其他库的话,还要手动将这些依赖库给添加进来.关键是如果这些第三方库后面有更新的话,我们还要先把项目中原来的库给删除.再重复前面的步骤.这样就很麻烦了. 而使用 CocoaPods 以后,这些工作我们都不需要做.只需做好配置工作,安装更新这些第三方库,CocoaPods 都会自动帮我们做好. 一.CocoaPods介绍 (1)CocoaPods