如何让Swift代码从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

我正在尝试读取使用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

    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”}作为字典