Так что, очевидно, ваш JSON недействителен, в конце он содержит недопустимые значения.
Первое, что нужно сделать.Ради сохранения логики вы можете использовать принудительное развертывание (используя !
), потому что это отладка.Я не уверен, что этот код компилируется, это просто логическая презентация.
let responseString = String(data: response.data, encoding: .utf8)
print("responseString: \(responseString)")
Это дает:
{"error":1,"message":"Undefined APIKey"}[]
В конце есть дополнительный []
, и тогдане действительный JSON.Вы можете попросить разработчика это исправить.Если вы действительно не можете или хотите продолжить развитие, пока он находится в процессе их поддержки, вы можете удалить лишний []
.
Вы можете проверить этот ответ , чтобы удалить последнийдва символа, а затем:
let cleanResponseJSONString = //check the linked answer
let cleanResponseData = cleanResponseJSONString.data(encoding: .utf8)
let json = try JSON(data: cleanResponseData)
Примечание и отладочная идея, если это было более сложно:
Я прошу print("data: \(response.data as! NSData)")
, потому что это печатает шестнадцатеричные данные.Ваша проблема могла быть связана с невидимым персонажем в конце.Если вы их не знаете, по крайней мере вы можете сделать это в соответствии с предыдущим ответом:
let jsonString = "{\"error\":1,\"message\":\"Undefined APIKey\"}" (that's almost reponseString)
let jsonData = jsonString.data(encoding: .utf8)
print("jsonData: \(jsonData as! NSData)")
И сравните, как выглядит конец.
Совет отладчика, вы можете использоватьответьте как этот , чтобы преобразовать hexDataString в Data
и отладить его.Я бы порекомендовал добавить пробел, удаление "<" и ">", чтобы вы могли легко скопировать / вставить его из вывода отладчика.Зачем?Если долго (много манипуляций) идти туда, где находится ваша проблема (вход в приложение, определенные действия и т. Д.), Это может сэкономить ваше время для отладки в другом приложении (Playground, в начале вашего AppDelegate и т. Д.).).
Не забудьте впоследствии удалить весь код отладки;)
Не относится к проблеме:
if response.data != nil {
do {
let json = try JSON(data: response.data!)
...
} catch {
...
}
}
Должно быть:
if let data = response.data {
do {
let json = try JSON(data: data)
...
} catch {
...
}
}
Используйте if let
, guard let
, чтобы развернуть, избегайте принудительного развертывания.