Я пытаюсь проанализировать некоторые JSON, это то, что он возвращает, когда я непосредственно перейти к URL:
[{"Password":"whatever1"}]
Мой код может правильно получать данные (когда я отлаживал переменную «data», указанную выше JSON), однако при попытке его проанализировать не получится. Я думаю, что это может быть связано с квадратными скобками, потому что я анализировал другие JSON без квадратных скобок, и это работает хорошо.
Вот мой код:
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"]
Других решений пока нет …