如何让Swift代码从JSON文件中读取特定信息
我正在尝试读取使用Swift托管的JSON文件中“Name”的数据,但我似乎只能读取整个JSON文件,而无法选择特定的数据。我的JSON文件包含以下内容:如何让Swift代码从JSON文件中读取特定信息,json,swift,Json,Swift,我正在尝试读取使用Swift托管的JSON文件中“Name”的数据,但我似乎只能读取整个JSON文件,而无法选择特定的数据。我的JSON文件包含以下内容: [{"Email":"Admin@admin.com","Password":"password","Name":"Admin"}] 我使用的swift代码如下: override func viewDidLoad() { super.viewDidLoad() //to get data from external DB
[{"Email":"Admin@admin.com","Password":"password","Name":"Admin"}]
我使用的swift代码如下:
override func viewDidLoad() {
super.viewDidLoad()
//to get data from external DB
let url = URL(string: "http://localhost/Projects/Test_mobileAPI/test_userInfo.php?email=Admin@admin.com")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil{
print("Error Occured")
}
else{
print("Okie")
if let content = data {
do{
//Array
let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
print("this part works")
print(myJson)
if let diction = myJson as? NSDictionary
{
if let name = myJson["Name"]{
print(name as Any)
}
}
}
catch{
print(error)
}
}
}
}
task.resume()
}
Okie
this part works
(
{
Email = "Admin@admin.com";
Name = Admin;
Password = password;
}
)
我一直得到的结果是:
override func viewDidLoad() {
super.viewDidLoad()
//to get data from external DB
let url = URL(string: "http://localhost/Projects/Test_mobileAPI/test_userInfo.php?email=Admin@admin.com")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil{
print("Error Occured")
}
else{
print("Okie")
if let content = data {
do{
//Array
let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
print("this part works")
print(myJson)
if let diction = myJson as? NSDictionary
{
if let name = myJson["Name"]{
print(name as Any)
}
}
}
catch{
print(error)
}
}
}
}
task.resume()
}
Okie
this part works
(
{
Email = "Admin@admin.com";
Name = Admin;
Password = password;
}
)
但我不仅仅得到“Name”的值。有人能帮我获取“Name”(即“Admin”)的值吗?你能试试吗
if let myJson = try JSONSerialization.jsonObject(with: content) as? [[String:Any]] {
if let first = myJson.first {
print(first["Name"])
}
}
问题是,您收到的JSON不是字典,而是一个包含字典的单元素数组。所以当你这么做的时候
if let diction = myJson as? NSDictionary
myJson对象无法转换为NSDictionary。如果首先展开数组,则应能够引用字典并拾取所需的任何键控值:
if let array = myJson as? NSArray
{
if let myDict = array[0] as? NSDictionary
{
if let name = myDict ["Name"]{
print(name as Any)
}
}
}
仅供参考-不要在Swift中使用
可变容器
选项。不要在Swift中使用NSDictionary
。使用Swift字典。请学习阅读JSON<代码>[]表示数组{}
意思是字典。@rmaddy[OT]你偷了我的“学会阅读”短语@vadian对不起,不知道你有版权。:)不是我的票,但你不应该在Swift中使用NSArray
或NSDictionary
。使用Swift数组和字典。那么我如何使它成为字典呢@克里斯Allwein@JonathanLamptey首先打开数组,如我的示例代码所示,或者让服务器发出JSON而不将其包装在数组中。[]表示一个json数组。{}表示字典。@Sh_Khab谢谢,这似乎有效,我将尝试进一步开发并返回给您,但它似乎有效。我认为不需要数组,只需将其设置为{“电子邮件”:Admin@admin.com“,“Password”:“Password”,“Name”:“Admin”}作为字典