如何使用新的 Swift 3 和 Alamofire 解析 JSON(字典和数组)
Posted
技术标签:
【中文标题】如何使用新的 Swift 3 和 Alamofire 解析 JSON(字典和数组)【英文标题】:How to pasre JSON (dictionary and array) using the new Swift 3 and Alamofire 【发布时间】:2017-09-11 07:38:51 【问题描述】:任何人都可以建议并向我发送获取 JSON 响应的示例代码。我以NSDictionary
的形式获取数据的API 很少,而我以NSArray
的形式获取数据的API 很少。
这是我对 Alamofire 的 API 请求。
APIManager.sharedInstance.getTeacherProfileDataFromURL()(userJson)-> Void in
let swiftyJsonVar = JSON(userJson)
print("userJson userJson userJson userJson",userJson)
print("swiftyJsonVar",swiftyJsonVar)
1) 带有 JSON 数据数组的 API
"status": 1,
“student”: [
"name": "Sprouse",
"subject": [
“english”
],
"personal_email": "",
"school_email": "cole.sprouse483@demo.in",
"phone": "9665478544",
"class_teacher": false,
"image": "/assets/default_male.png"
,
"name": “elen”,
"subject": [
"Social Science"
],
"personal_email": "",
"school_email": "elena.gilbert564@demo.in",
"phone": "9066260799",
"class_teacher": false,
"image": "/assets/default_female.png"
,
],
"message": "Details fetched successfully."
2) 另一个带有 JSON 数据字典的 API
"status": 1,
"dashboard":
"announcement": [
"title": "Independence Day Celebration",
"posted_on": "13 August, 2017"
],
"student":
"attendance_percent": 100,
"assignment": [
"title": "Alphabets in HINDI",
"end_date": "13/09/2017",
"subject": "Hindi",
"teacher_name": "Bonnie Bennette"
],
"leave_apply": 13
,
"image": "/system/images/86/j1f9DiJi_thumb.jpg?1504593436"
,
"message": "Details fetched successfully."
【问题讨论】:
您可以使用SwiftyJSON
。
@NaumanMalik 我正在使用 swiftyjson。我是新来的 迅速。这就是为什么我无法处理 json 数据。可以发示例代码吗
请阅读Correctly parsing JSON in Swift 3 了解如何读取 JSON 字符串。这很容易。还有如何处理数组和字典的示例代码
@vadian 谢谢。但我正在寻找 alamofire req 和 post
【参考方案1】:
1) 带有 JSON 数据数组的 API
let swiftyJsonVar = JSON(userJson)
let array : [[String : String]] = swiftyJsonVar["student"]
这将为您提供一组字典或学生的键值。 此外,您可以像这样从数组中获取另一个值
let name : String = array[0]["name"]
2) 另一个带有 JSON 数据字典的 API
let swiftyJsonVar = JSON(userJson)
let dictionary : [[String : String]] = swiftyJsonVar["dashboard"]
这将为您提供一个字典数组或仪表板键值。
let array : [[String : String]] = dictionary["announcement"]
这将为您提供公告数组,接下来您可以获得像这样的更多值
let name : array = array[0]["title"]
【讨论】:
let array : [[String : String]] = swiftyJsonVar["student"] 我尝试使用这个我得到错误“”不能用索引为'json'类型的值下标类型,字符串'"" 请使用您自己的变量名。 我正在使用变量名,但显示上述错误 你的 JSON 变量的数据类型是什么?【参考方案2】:我很久以前就解决了我的问题,最近发布这是我的答案,它可能对其他人有帮助,这就是我在这里发布的原因。 如果数据是数组的形式。
DispatchQueue.main.async
TeacherAPIManager.sharedInstance.FetchTeacherStudentAttendanceDataFromURL()(attendanceJson)-> Void in
print("observationInfo --",attendanceJson)
let swiftyAttendanceJsonVar = JSON(attendanceJson)
let observation = swiftyAttendanceJsonVar["list"].rawString()!
let jsonData = observation.data(using: .utf8)!
let array = try? JSONSerialization.jsonObject(with: jsonData, options: []) as! Array< Any>
for observationVar in array!
let totlDic = NSMutableDictionary()
let dic = observationVar as! Dictionary<String,Any>
如果数据是字典的形式。只需在上面的函数数组行中替换下面的行代码即可。
let dictionary = try? JSONSerialization.jsonObject(with: jsonData, options: []) as! Dictionary<String, Any>
【讨论】:
以上是关于如何使用新的 Swift 3 和 Alamofire 解析 JSON(字典和数组)的主要内容,如果未能解决你的问题,请参考以下文章
MagicalRecord 如何使用 CocoaPods 设置新的 Swift 项目使用:branch => 'develop' 即 2.3.0-beta.5
如何使用 FlipAnimation 从每个 CollectionViewCell 打开一个新的 ViewController 并关闭 Swift 3
如何将计时器中的数据传递给新的 ViewController (Swift 3)
如何在 Swift 3 的 WKWebView 中注入 javascript
如何在 Swift 3.0 中将 TableViewCell 值传递给新的 ViewController?
如何将 SKSpriteNode 合并到 SKTexture 以在 Swift 3 中形成新的 SKSpriteNode?