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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

[Swift]SwiftyJSON的使用:解析JSON

發(fā)布時(shí)間:2023/12/14 javascript 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Swift]SwiftyJSON的使用:解析JSON 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
?微信公眾號(hào):山青詠芝(shanqingyongzhi)
?博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/?)
?GitHub地址:https://github.com/strengthen/LeetCode
?原文地址:https://www.cnblogs.com/strengthen/p/10709048.html?
?如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
?原文已修改更新!強(qiáng)烈建議點(diǎn)擊原文地址閱讀!支持作者!支持原創(chuàng)!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

用法

初始化Initialization

import SwiftyJSON let json = JSON(data: dataFromNetworking)

或者

1 let json = JSON(jsonObject)

或者

1 if let dataFromString = jsonString.data(using: .utf8, allowLossyConversion: false) { 2 let json = JSON(data: dataFromString) 3 }

下標(biāo)Subscript

1 //從JSON數(shù)組中獲取Double 2 let name = json[0].double 3 //從JSON數(shù)組中獲取字符串?dāng)?shù)組 4 let arrayNames = json["users"].arrayValue.map {$0["name"].stringValue} 5 //從JSON字典中獲取字符串 6 let name = json["name"].stringValue 7 //使用元素的路徑獲取字符串 8 let path: [JSONSubscriptType] = [1,"list",2,"name"] 9 let name = json[path].string 10 // 相同 11 let name = json[1]["list"][2]["name"].string 12 // 或者 13 let name = json[1,"list",2,"name"].string 14 //使用困難的方式 15 let name = json[].string 16 //使用自定義方式 17 let keys:[JSONSubscriptType] = [1,"list",2,"name"] 18 let name = json[keys].string

循環(huán)Loop

1 //如果json是.Dictionary 2 for (key,subJson):(String, JSON) in json { 3 // Do something you want 4 }

即使JSON是一個(gè)數(shù)組,第一個(gè)元素也總是一個(gè)String

1 //如果json是.Array 2 // `index`是0 .. <json.count的字符串值 3 for (index,subJson):(String, JSON) in json { 4 // Do something you want 5 }

錯(cuò)誤Error

SwiftyJSON 4.x

SwiftyJSON 4.x的引入稱為枚舉類型SwiftyJSONError,其中包括unsupportedType,indexOutOfBounds,elementTooDeep,wrongType,notExist和invalidJSON,在同一時(shí)間,ErrorDomain正在被更換SwiftyJSONError.errorDomain。注意:這些舊的錯(cuò)誤類型在SwiftyJSON 4.x中已棄用,將在以后的版本中刪除。

SwiftyJSON 3.x

使用下標(biāo)來獲取/設(shè)置數(shù)組或字典中的值

如果JSON是:

  • 一個(gè)數(shù)組,應(yīng)用程序可能會(huì)崩潰“索引越界”。
  • 一本字典,它將被nil無故分配。
  • 不是數(shù)組或字典,應(yīng)用程序可能會(huì)崩潰“無法識(shí)別的選擇器”異常。

這在SwiftyJSON中永遠(yuǎn)不會(huì)發(fā)生。

1 let json = JSON(["name", "age"]) 2 if let name = json[999].string { 3 // Do something you want 4 } else { 5 print(json[999].error!) // "Array[999] is out of bounds" 6 } 7 8 let json = JSON(["name":"Jack", "age": 25]) 9 if let name = json["address"].string { 10 // Do something you want 11 } else { 12 print(json["address"].error!) // "Dictionary["address"] does not exist" 13 } 14 15 let json = JSON(12345) 16 if let age = json[0].string { 17 // Do something you want 18 } else { 19 print(json[0]) // "Array[0] failure, It is not an array" 20 print(json[0].error!) // "Array[0] failure, It is not an array" 21 } 22 23 if let name = json["name"].string { 24 // Do something you want 25 } else { 26 print(json["name"]) // "Dictionary[\"name"] failure, It is not an dictionary" 27 print(json["name"].error!) // "Dictionary[\"name"] failure, It is not an dictionary" 28 }

可選的getter

1 // NSNumber 2 if let id = json["user"]["favourites_count"].number { 3 // Do something you want 4 } else { 5 // Print the error 6 print(json["user"]["favourites_count"].error!) 7 } 8 9 // String 10 if let id = json["user"]["name"].string { 11 // Do something you want 12 } else { 13 // Print the error 14 print(json["user"]["name"].error!) 15 } 16 17 // Bool 18 if let id = json["user"]["is_translator"].bool { 19 // Do something you want 20 } else { 21 // Print the error 22 print(json["user"]["is_translator"].error!) 23 } 24 25 // Int 26 if let id = json["user"]["id"].int { 27 // Do something you want 28 } else { 29 // Print the error 30 print(json["user"]["id"].error!) 31 } 32 ...

非可選的getter

非可選的getter被命名?xxxValue

1 //如果不是Number或nil,則返回0 2 let id: Int = json["id"].intValue 3 //如果不是String或nil,則返回“” 4 let name: String = json["name"].stringValue 5 //如果不是數(shù)組或者為nil,則返回[] 6 let list: Array<JSON> = json["list"].arrayValue 7 //如果不是Dictionary或nil,返回[:] 8 let user: Dictionary<String, JSON> = json["user"].dictionaryValue

Setter

1 json["name"] = JSON("new-name") 2 json[0] = JSON(1) 3 json["id"].int = 1234567890 4 json["coordinate"].double = 8766.766 5 json["name"].string = "Jack" 6 json.arrayObject = [1,2,3,4] 7 json.dictionaryObject = ["name":"Jack", "age":25]

原始對(duì)象Raw object

1 let rawObject: Any = json.object 2 let rawValue: Any = json.rawValue 3 //將JSON轉(zhuǎn)換為原始NSData 4 do { 5 let rawData = try json.rawData() 6 //Do something you want 7 } catch { 8 print("Error \(error)") 9 } 10 //將JSON轉(zhuǎn)換為原始String 11 if let rawString = json.rawString() { 12 //Do something you want 13 } else { 14 print("json.rawString is nil") 15 }

存在Existence

1 //顯示是否在JSON中指定了值 2 if json["name"].exists()

文字敞篷車

有關(guān)文字敞篷車的更多信息:Swift Literal Convertibles

1 // StringLiteralConvertible 2 let json: JSON = "I'm a json" 3 // IntegerLiteralConvertible 4 let json: JSON = 12345 5 // BooleanLiteralConvertible 6 let json: JSON = true 7 // FloatLiteralConvertible 8 let json: JSON = 2.8765 9 // DictionaryLiteralConvertible 10 let json: JSON = ["I":"am", "a":"json"] 11 // ArrayLiteralConvertible 12 let json: JSON = ["I", "am", "a", "json"] 13 //使用數(shù)組中的下標(biāo) 14 var json: JSON = [1,2,3] 15 json[0] = 100 16 json[1] = 200 17 json[2] = 300 18 json[999] = 300 //別擔(dān)心,什么都不會(huì)發(fā)生 19 //使用字典中的下標(biāo) 20 var json: JSON = ["name": "Jack", "age": 25] 21 json["name"] = "Mike" 22 json["age"] = "25" // It's OK to set String 23 json["address"] = "L.A." // Add the "address": "L.A." in json 24 //數(shù)組和字典 25 var json: JSON = ["name": "Jack", "age": 25, "list": ["a", "b", "c", ["what": "this"]]] 26 json["list"][3]["what"] = "that" 27 json["list",3,"what"] = "that" 28 let path: [JSONSubscriptType] = ["list",3,"what"] 29 json[path] = "that" 30 //使用其他JSON對(duì)象 31 let user: JSON = ["username" : "Steve", "password": "supersecurepassword"] 32 let auth: JSON = [ 33 "user": user.object, // use user.object instead of just user 34 "apikey": "supersecretapitoken" 35 ]

合并Merging

可以將一個(gè)JSON合并到另一個(gè)JSON中。將JSON合并到另一個(gè)JSON中會(huì)將所有非現(xiàn)有值添加到僅存在于otherJSON中的原始JSON。

如果兩個(gè)JSON都包含相同鍵的值,則大多數(shù)此值會(huì)被原始JSON覆蓋,但有兩種情況會(huì)提供一些特殊處理:

  • 如果兩個(gè)值都是值,那么JSON.Type.array在otherJSON中找到的數(shù)組會(huì)附加到原始JSON的數(shù)組值。
  • 如果兩個(gè)值都是JSON.Type.dictionary兩個(gè)JSON值,那么合并的方式與封裝JSON的合并方式相同。

如果JSON中的兩個(gè)字段具有不同的類型,則該值將始終被覆蓋。

合并有兩種不同的方式:merge修改原始JSON,而merged在副本上非破壞性地工作。

1 let original: JSON = [ 2 "first_name": "John", 3 "age": 20, 4 "skills": ["Coding", "Reading"], 5 "address": [ 6 "street": "Front St", 7 "zip": "12345", 8 ] 9 ] 10 11 let update: JSON = [ 12 "last_name": "Doe", 13 "age": 21, 14 "skills": ["Writing"], 15 "address": [ 16 "zip": "12342", 17 "city": "New York City" 18 ] 19 ] 20 21 let updated = original.merge(with: update) 22 // [ 23 // "first_name": "John", 24 // "last_name": "Doe", 25 // "age": 21, 26 // "skills": ["Coding", "Reading", "Writing"], 27 // "address": [ 28 // "street": "Front St", 29 // "zip": "12342", 30 // "city": "New York City" 31 // ] 32 // ]

字符串表示

有兩種選擇:

  • 使用默認(rèn)的Swift
  • 使用一個(gè)可以很好地處理選項(xiàng)的自定義表示nil為"null":
1 let dict = ["1":2, "2":"two", "3": nil] as [String: Any?] 2 let json = JSON(dict) 3 let representation = json.rawString(options: [.castNilToNSNull: true]) 4 // 表示為“{\”1 \“:2,\”2 \“:\”two \“,\”3 \“:null}”,表示{“1”:2,“2”:“two” “3”:空}

與Alamofire合作

SwiftyJSON很好地包裝了Alamofire JSON響應(yīng)處理程序的結(jié)果:

1 Alamofire.request(url, method: .get).validate().responseJSON { response in 2 switch response.result { 3 case .success(let value): 4 let json = JSON(value) 5 print("JSON: \(json)") 6 case .failure(let error): 7 print(error) 8 } 9 }

我們還提供了Alamofire的擴(kuò)展,用于將NSData序列化為SwiftyJSON的JSON。

請(qǐng)參閱:Alamofire-SwiftyJSON

與Moya合作

SwiftyJSON將數(shù)據(jù)解析為JSON:

1 let provider = MoyaProvider<Backend>() 2 provider.request(.showProducts) { result in 3 switch result { 4 case let .success(moyaResponse): 5 let data = moyaResponse.data 6 let json = JSON(data: data) //將網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)換為json 7 print(json) 8 case let .failure(error): 9 print("error: \(error)") 10 } 11 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/strengthen/p/10709048.html

總結(jié)

以上是生活随笔為你收集整理的[Swift]SwiftyJSON的使用:解析JSON的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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