javascript
[快速学会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) inif (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) inswitch 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)解析
總結
以上是生活随笔為你收集整理的[快速学会Swift第三方库] SwiftyJSON篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由器与交换机知识总
- 下一篇: angular中$cacheFactor