将JSON数据转换为Swift 3中的可用变量
目前,我有一些代码将获取我提供的json数据并对其进行解析,但是我将所有内容都打包在for循环中,我不知道如何将其取出 JSON数据:将JSON数据转换为Swift 3中的可用变量,json,swift3,xcode8,Json,Swift3,Xcode8,目前,我有一些代码将获取我提供的json数据并对其进行解析,但是我将所有内容都打包在for循环中,我不知道如何将其取出 JSON数据: [ { "id": 1, "displayName": "Jacob Blacksten", "department": "DF", "mamager": "San", "office": "NYC", "util": 2 } ] 工作代码: do { let json = try JSONSerialization.jsonObject(with: d
[
{
"id": 1,
"displayName": "Jacob Blacksten",
"department": "DF",
"mamager": "San",
"office": "NYC",
"util": 2
}
]
工作代码:
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers)
guard let array = json as? [Any] else {return}
for user in array {
guard let userDict = user as? [String: Any] else {return}
guard let id = userDict["id"] as? Int else { return }
guard let name = userDict["displayName"] as? String else { return}
guard let department = userDict["department"] as? String else {return}
guard let manager = userDict["mamager"] as? String else {return}
guard let office = userDict["office"] as? String else {return}
guard let util = userDict["util"] as? Int else {return}
print(id)
print(name)
print(department)
print(manager)
print(office)
print(util)
}
} catch{
print(error)
}
您会注意到所有内容都在for循环中,创建了一个包含所有用户的数组。然而,我只有一个用户,我希望能够拉出say id,并将其用作变量,以便稍后在我的应用程序的标签中打印出来。我希望这是有道理的。我基本上只想操纵这个JSON数据,这样我就可以使用它并在我的应用程序的标签中打印它们 如果要在其他地方使用变量,只需将它们保存到循环范围之外的某个地方即可。我建议创建一个User类,并将json中的值保存到User的实例中
// User.swift
class User {
// Identifier
let id: Int
// Instance variables
var name: String?
var department: String?
var manager: String?
var office: String?
var util: Int?
init(withId id: Int) {
self.id = id
}
}
然后,你可以把你的循环变成这样
var user: User?
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers)
guard let array = json as? [Any],
let userDict = array[0] as? [String: Any],
let id = userDict["id"] as? Int,
let name = userDict["displayName"] as? String,
let department = userDict["department"] as? String,
let manager = userDict["manager"] as? String,
let office = userDict["office"] as? String,
let util = userDict["util"] as? Int else {
return
}
user = User(withId: id)
user.name = name
user.department = department
user.manager = manager
user.office = office
user.util = util
} catch{
print(error)
}
// Here, the user variable has all the updated info
userIdLabel?.text = "\(user?.id)"
注意:这一切都是在浏览器中完成的,没有测试为什么要将带有可变容器的类型分配给不可变常量let json?