日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

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

發布時間:2025/4/16 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swift语言中如何使用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)//2if 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//2if let urlData = data {//3 success(iTunesData: urlData)}})}

?

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

?

//從iTunes and 并通過SwiftyJSON獲取排名第一的app

DataManager.getTopAppsDataFromItunesWithSuccess { (iTunesData) -> Void inlet json = JSON(data: iTunesData)if let appName = json["feed"]["entry"][0]["im:name"]["label"].string {println("NSURLSession: \(appName)")}// More soon... }

?

?

運行結果:

?

wiftyJSON: Clash of ClansNSURLSession: Clash of Clans

?

?

?

?

解析JSON到array數組

?

在viewController中More soon 后添加如下內容://1if let appArray = json["feed"]["entry"].arrayValue {//2 var apps = [AppModel]()//3for appDict in appArray {var appName: String? = appDict["im:name"]["label"].stringValuevar appURL: String? = appDict["im:image"][0]["label"].stringValuevar app = AppModel(name: appName, appStoreURL: appURL)apps.append(app)}//4 println(apps)}

?

?

?

從JSON 數據中遍歷并保存到類型為appModel的apps數組中。

?

運行程序:?

?

在真實的程序中,我們會通過UITableView或者UICollectionView顯示數據。

?

這就是使用原生類和第三方類庫SwfitJSON解析JSON數據的方法。

?

總結

以上是生活随笔為你收集整理的Swift语言中如何使用JSON数据教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。