У меня есть эта ошибка json, которая, кажется, случайно появляется.
Я загружаю json из домена и анализирую его в словарь.Если ошибка не возникает, она работает безупречно.Вот код:
func retrieveCoinPairData() {
guard !checkIfBaseAndTargetAreEqual() else { return }
if let base = self.currentBase, let target = self.currentTarget {
if let url = URL(string: "https://api.cryptonator.com/api/full/\(base.code)-\(target.code)") {
URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
if let error = error {
print(error.localizedDescription)
}
if let response = response {
print("reponse /api/full", response)
}
do {
if let data = data {
let jsonData = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String: Any]
self.createCoinPairData(with: jsonData)
} else {
self.delegate?.updateInfoLabelContent(content: .noInternetConnection)
}
} catch {
self.delegate?.updateInfoLabelContent(content: .error)
print("catch error", error, data?.description as Any)
self.retrieveCoinPairData()
}
}).resume()
} else {
self.delegate?.updateInfoLabelContent(content: .error)
}
}
}
Ответ сервера следующий: выдается ошибка 403:
reponse /api/full <NSHTTPURLResponse: 0x608000232400> {
URL: https://api.cryptonator.com/api/full/BTC-ETH } {
status code: 403, headers {
Connection = "keep-alive";
"Content-Encoding" = gzip;
"Content-Type" = "text/html";
Date = "Tue, 05 Jun 2018 04:23:37 GMT";
"Keep-Alive" = "timeout=15";
Server = nginx;
"Transfer-Encoding" = Identit
, а ошибка перехвата URLSession следующая:
catch error Error Domain=NSCocoaErrorDomain Code=3840
"Invalid value around character 0."
UserInfo={NSDebugDescription=Invalid value around character 0.}
Optional("162 bytes")
Ошибка возникает в строке try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String: Any]
.
Теперь в любое время эта ошибка возникает (и она совершенно случайная), когда я проверяю URL в браузере, она отлично работает.
Я проверил json с помощью jsonlint.com, и он действителен, нет объекта верхнего уровня, который бы требовал фрагментации json, хотя эта опция, казалось, уменьшала ошибку в прошлом.
Я знаю, что ошибка кода 403 говорит мне, что веб-сайт блокирует доступ, а ошибка кода 3840 говорит мне, что нет содержимого для анализа.Тем не менее, мне интересно, где и почему возникает ошибка.
Этот сайт используется в этом примере: https://api.cryptonator.com/api/full/btc-eth