尝试在 swift 中解析 JSON 但无法正常工作
Trying to Parse JSON in swift but not working
我正在尝试解析一些 JSON,这是我直接转到 URL 时返回的内容:
[{"Password":"whatever1"}]
我的代码能够正确接收数据(当我调试变量 "data" 具有上述 JSON 时)但是当尝试解析它时,它不起作用。我认为这可能与方括号有关,因为我一直在解析其他没有方括号的 JSONs 并且效果很好。
这是我的代码:
func SignIn (username: String, password: String, completion: @escaping (Bool)->())
{
let url = URL(string: "http://<myIP>/API/SignIn.php?username=\(username)");
let task = URLSession.shared.dataTask(with: url!)
{ (data, response, error) in
if let data = data
{
do
{
// Convert the data to JSON
let jsonSerialized = try JSONSerialization.jsonObject(with: data, options: []) as? [String : Any]
// print( jsonSerialized)
if let json = jsonSerialized, let result = json["Password"]
{
print(result)
if (String(describing: result) == password)
{
completion(true)
}
else
{
completion(false)
}
// TODO: password is wrong,
// TODO: username is wrong
// TODO: else if timeout
}
}
catch let error as NSError {
print(error.localizedDescription)
completion(false)
}
}
else if let error = error
{
print(error.localizedDescription)
completion(false)
}
}
task.resume()
}
将代码重写为:
let jsonSerialized = try JSONSerialization.jsonObject(with: data, options: []) as? [[String : Any]]
这是必需的,因为您的 JSON 响应是一组字典,就像其他人提到的那样。
使用以下方式访问结果:
let result = json.first["Password"]
我正在尝试解析一些 JSON,这是我直接转到 URL 时返回的内容:
[{"Password":"whatever1"}]
我的代码能够正确接收数据(当我调试变量 "data" 具有上述 JSON 时)但是当尝试解析它时,它不起作用。我认为这可能与方括号有关,因为我一直在解析其他没有方括号的 JSONs 并且效果很好。
这是我的代码:
func SignIn (username: String, password: String, completion: @escaping (Bool)->())
{
let url = URL(string: "http://<myIP>/API/SignIn.php?username=\(username)");
let task = URLSession.shared.dataTask(with: url!)
{ (data, response, error) in
if let data = data
{
do
{
// Convert the data to JSON
let jsonSerialized = try JSONSerialization.jsonObject(with: data, options: []) as? [String : Any]
// print( jsonSerialized)
if let json = jsonSerialized, let result = json["Password"]
{
print(result)
if (String(describing: result) == password)
{
completion(true)
}
else
{
completion(false)
}
// TODO: password is wrong,
// TODO: username is wrong
// TODO: else if timeout
}
}
catch let error as NSError {
print(error.localizedDescription)
completion(false)
}
}
else if let error = error
{
print(error.localizedDescription)
completion(false)
}
}
task.resume()
}
将代码重写为:
let jsonSerialized = try JSONSerialization.jsonObject(with: data, options: []) as? [[String : Any]]
这是必需的,因为您的 JSON 响应是一组字典,就像其他人提到的那样。
使用以下方式访问结果:
let result = json.first["Password"]