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

歡迎訪問 生活随笔!

生活随笔

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

javascript

数据存储之SwiftJSON

發(fā)布時間:2023/12/14 javascript 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据存储之SwiftJSON 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

SwiftyJSON 可以讓你在 Swift 語言中更好的處理 JSON 數(shù)據(jù)

1,SwiftyJSON介紹與配置

SwiftyJSON是個使用Swift語言編寫的開源庫,可以讓我們很方便地處理JSON數(shù)據(jù)(解析數(shù)據(jù)、生成數(shù)據(jù))。
GitHub地址:https://github.com/SwiftyJSON/SwiftyJSON

使用配置:直接 SwiftyJSON.swift 添加到項目中即可。

2,SwiftyJSON的優(yōu)點

同 NSJSONSerializationSwiftyJSON 相比,在獲取多層次結(jié)構(gòu)的JSON數(shù)據(jù)時。SwiftyJSON不需要一直判斷這個節(jié)點是否存在,是不是我們想要的class,下一個節(jié)點是否存在,是不是我們想要的class…。同時,SwiftyJSON內(nèi)部會自動對optional(可選類型)進行拆包(Wrapping ),大大簡化了代碼。
(1)比如我們有一個如下的JSON數(shù)據(jù),表示聯(lián)系人集合:

[{"name": "hangge","age": 100,"phones": [{"name": "公司","number": "123456"},{"name": "家庭","number": "001"}]},{"name": "big boss","age": 1,"phones": [{"name": "公司","number": "111111"}]} ] 為便于測試比較,我們先將JSON格式的字符串轉(zhuǎn)為NSData:let jsonStr = "[{\"name\": \"hangge\", \"age\": 100, \"phones\": [{\"name\": \"公司\",\"number\": \"123456\"}, {\"name\": \"家庭\",\"number\": \"001\"}]}, {\"name\": \"big boss\",\"age\": 1,\"phones\": [{ \"name\": \"公司\",\"number\": \"111111\"}]}]"if let jsonData = jsonStr.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {//......... }

(2)使用NSJSONSerializationSwiftyJSON解析
比如我們要取第一條聯(lián)系人的第一個電話號碼,每個級別都判斷就很麻煩,代碼如下:

if let userArray = try? NSJSONSerialization.JSONObjectWithData(jsonData,options: .AllowFragments) as? [[String: AnyObject]],let phones = userArray?[0]["phones"] as? [[String: AnyObject]],let number = phones[0]["number"] as? String {// 找到電話號碼print("第一個聯(lián)系人的第一個電話號碼:",number) } 即使使用optional來簡化一下,代碼也不少:if let userArray = try? NSJSONSerialization.JSONObjectWithData(jsonData,options: .AllowFragments) as? [[String: AnyObject]],let number = (userArray?[0]["phones"] as? [[String: AnyObject]])?[0]["number"]as? String {// 找到電話號碼print("第一個聯(lián)系人的第一個電話號碼:",number) }

(3)使用SwiftyJSON解析:
不用擔心數(shù)組越界,不用判斷節(jié)點,拆包什么的,代碼如下:

let json = JSON(data: jsonData) if let number = json[0]["phones"][0]["number"].string { // 找到電話號碼 print("第一個聯(lián)系人的第一個電話號碼:",number) } 原文:Swift - SwiftyJSON的使用祥解(附樣例,用于JSON數(shù)據(jù)處理) 如果沒取到值,還可以走到錯誤處理來了,打印一下看看錯在哪:let json = JSON(data: jsonData) if let number = json[0]["phones"][0]["number"].string { // 找到電話號碼 print("第一個聯(lián)系人的第一個電話號碼:",number) }else { // 打印錯誤信息 print(json[0]["phones"][0]["number"]) }

3,獲取網(wǎng)絡(luò)數(shù)據(jù),并使用SwiftyJSON解析
除了解析本地的JSON數(shù)據(jù),我們其實更常通過url地址獲取遠程數(shù)據(jù)并解析。

1)與NSURLSession結(jié)合//創(chuàng)建NSURL對象 let urlString:String="http://www.111cn.net /getJsonData.php" let url:NSURL! = NSURL(string:urlString) //創(chuàng)建請求對象 let request:NSURLRequest = NSURLRequest(URL: url)let session = NSURLSession.sharedSession()let dataTask = session.dataTaskWithRequest(request,completionHandler: {(data, response, error) -> Void inif error != nil{print(error?.code)print(error?.description)}else{let json = JSON(data: data!)if let number = json[0]["phones"][0]["number"].string {// 找到電話號碼print("第一個聯(lián)系人的第一個電話號碼:",number)}} }) as NSURLSessionTask//使用resume方法啟動任務(wù) dataTask.resume() (2)與Alamofire結(jié)合//創(chuàng)建NSURL對象 let urlString:String="http://www.111cn.net /code/test.php" let url:NSURL! = NSURL(string:urlString)Alamofire.request(.GET, url).validate().responseJSON { response inswitch response.result {case .Success:if let value = response.result.value {let json = JSON(value)if let number = json[0]["phones"][0]["number"].string {// 找到電話號碼print("第一個聯(lián)系人的第一個電話號碼:",number)}}case .Failure(let error):print(error)} }

4,獲取值
(1)可選值獲取(Optional getter)
通過.number、.string、.bool、.int、.uInt、.float、.double、.array、.dictionary、int8、Uint8、int16、Uint16、int32、Uint32、int64、Uint64等方法獲取到的是可選擇值,我們需要自行判斷是否存在,同時不存在的話可以獲取具體的錯誤信息。

//int if let age = json[0]["age"].int { print(age) } else { //打印錯誤信息 print(json[0]["age"]) }//String if let name = json[0]["name"].string { print(name) } else { //打印錯誤信息 print(json[0]["name"]) }

(2)不可選值獲取(Non-optional getter)
使用 xxxValue 這樣的屬性獲取值,如果沒獲取到的話會返回一個默認值。省得我們再判斷拆包了。

//If not a Number or nil, return 0 let age: Int = json[0]["age"].intValue//If not a String or nil, return "" let name: String = json[0]["name"].stringValue//If not a Array or nil, return [] let list: Array<JSON> = json[0]["phones"].arrayValue//If not a Dictionary or nil, return [:] let phone: Dictionary<String, JSON> = json[0]["phones"][0].dictionaryValue

(3)獲取原始數(shù)據(jù)(Raw object)

let jsonObject: AnyObject = json.objectif let jsonObject: AnyObject = json.rawValue//JSON轉(zhuǎn)化為NSData if let data = json.rawData() {//Do something you want }//JSON轉(zhuǎn)化為String字符串 if let string = json.rawString() {//Do something you want }

5,設(shè)置值

json[0]["age"].int = 101 json[0]["name"].string = "111cn.net " json[0]["phones"].arrayObject = [["name":"固話", "number":110],["name":"手機", "number":120]] json[0]["phones"][0].dictionaryObject = ["name":"固話", "number":100]

6,下標訪問(Subscript)
可以通過數(shù)字、字符串、數(shù)組類型的下標訪問JSON數(shù)據(jù)的層級與屬性。比如下面三種方式的結(jié)果都是一樣的:

//方式1 let number = json[0]["phones"][0]["number"].stringValue//方式2 let number = json[0,"phones",0,"number"].stringValue//方式3 let keys:[JSONSubscriptType] = [0,"phones",0,"number"] let number = json[keys].stringValue

7,循環(huán)遍歷JSON對象中的所有數(shù)據(jù)

(1)如果JSON數(shù)據(jù)是數(shù)組類型(Array)

for (index,subJson):(String, JSON) in json {print("\(index):\(subJson)") }

(2)如果JSON數(shù)據(jù)是字典類型(Dictionary)

for (key,subJson):(String, JSON) in json[0] {print("\(key):\(subJson)") }

8,構(gòu)造創(chuàng)建JSON對象數(shù)據(jù)
(1)空的JSON對象

let json: JSON = nil

(2)使用簡單的數(shù)據(jù)類型創(chuàng)建JSON對象

//StringLiteralConvertible let json: JSON = "I'm a son"//IntegerLiteralConvertible let json: JSON = 12345//BooleanLiteralConvertible let json: JSON = true//FloatLiteralConvertible let json: JSON = 2.8765

(3)使用數(shù)組或字典數(shù)據(jù)創(chuàng)建JSON對象

//DictionaryLiteralConvertible let json: JSON = ["I":"am", "a":"son"]//ArrayLiteralConvertible let json: JSON = ["I", "am", "a", "son"]//Array & Dictionary var json: JSON = ["name": "Jack", "age": 25, "list": ["a", "b", "c", ["what": "this"]]] json["list"][3]["what"] = "that" json["list",3,"what"] = "that" let path = ["list",3,"what"] json[path] = "that"

總結(jié)

以上是生活随笔為你收集整理的数据存储之SwiftJSON的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。