#ios #swift #alamofire
#iOS #swift #alamofire
Вопрос:
Я пытаюсь проанализировать данные из ответа alamofire. Если я напечатаю весь ответ, он будет работать хорошо, но если я хочу напечатать определенный параметр в формате JSON, например «FirstName», он возвращает ноль.
AF.request("http://localhost:5000/api/users").responseJSON(completionHandler: { (res) in
switch res.result {
case let .success(value):
let xjson : JSON = JSON(res.value)
print(xjson["firstName"].string)
case let .failure(error):
print(error)
}
})
В консоли нет ошибок
Код ниже
AF.request("http://localhost:5000/api/users").responseJSON(completionHandler: { (res) in
switch res.result {
case let .success(value):
let xjson : JSON = JSON(res.value)
print(xjson)
print(xjson["firstName"].string)
case let .failure(error):
print(error)
}
})
ВОЗВРАТ
[
{
"dateOfBirth" : "1998-11-18T00:00:00.000Z",
"_id" : "5f6a29ed16444afd36e9fe15",
"email" : "sdasd@mail.com",
"__v" : 0,
"firstName" : "adam",
"lastName" : "kowalski",
"accountCreateDate" : "2020-09-22T16:44:29.692Z",
"userPassword" : "12345",
"userLogin" : "loginakowalski"
}
]
nil
Комментарии:
1. можете ли вы также опубликовать полную строку json, которая печатается при печати всего ответа?
2. попробуйте использовать только значение в JSON в качестве параметра вместо res.value
3. Добавлен ответ с консоли
4. Ваш JSON — это массив верхнего уровня, а не словарь. Вот почему это не удается.
5. у вас есть массив
[]
объектов в json, а не непосредственно объект json{}
.. итак, что вам нужноfirstName
, это изfirst
объекта в массиве json.
Ответ №1:
Это xjson
один Array
из JSON
(выглядит пользователем) объектов. Итак, вам нужно получить доступ к элементам массива, как показано ниже,
let xjson : JSON = JSON(res.value)
if let firstUser = xjson.array?.first {
print(firstUser["firstName"] as? String)
}
Вы также можете поместить свой JSON
ответ здесь и получить необходимые типы данных и код декодирования бесплатно.
Комментарии:
1. Ваш код возвращает ошибку: значение типа ‘(String, JSON)’ не имеет индексов
2. Просто замените
xjson.first
наxjson.array?.first
.3. Я заменил, и теперь ошибки нет, но он все равно возвращает ноль…
4. У меня также есть предупреждение «Приведение из ‘JSON’ в несвязанный тип ‘String’ всегда завершается ошибкой»
5. @Kamran также замените
firstUser["firstName"] as? String
наfirstUser["firstName"].stringValue
Ответ №2:
Спасибо всем за вашу помощь. Ниже приведен код, который возвращает правильное значение:
AF.request("http://localhost:5000/api/users").responseJSON(completionHandler: { (res) in
switch res.result {
case let .success(value):
let xjson : JSON = JSON(res.value)
if let firstUser = xjson.array?.first {
print(firstUser["firstName"].string!)
}
case let .failure(error):
print(error)
}
})