Я пытаюсь декодировать JSON с одним значением. Это значение без ключа.
Alamofire
.request(query, method: method, parameters: parameters)
.validate()
.responseJSON { response in
print(response.request as Any)
switch response.result {
case .success(_):
let data = response.data
guard let data = data else {
throw CustomExceptions.invalidJSON("No response found.")
}
do {
let result = try APIHelper.deserialize(type: type, from: data)
print(result)
} catch {
print(error)
}
case .failure(let error):
print(error)
}
}
Файл JSON содержит только одно значение без какого-либо ключа, т.е. true. В данном случае это логическое значение. Результат должен быть верным.
Но я получаю эту ошибку.
dataCorrupted(Swift.DecodingError.Context(codingPath: [], debugDescription: "The given data was not valid JSON.", underlyingError: Optional(Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo = {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.})))
Если это всего лишь одно значение, почему бы просто не преобразовать/преобразовать его в строку, зачем пытаться декодировать его как json?
@JoakimDanielson Я пишу код, в котором много запросов, поэтому, чтобы избежать повторения, я хотел использовать одну функцию для декодирования всех видов ответов. Он работает на таких языках, как Java, где одно значение, не имеющее ключа, может быть десериализовано напрямую, поэтому я предположил, что в моем быстром коде может быть что-то не так.
Alamofire поддерживает только ответ JSON. Вам нужно изменить код во внутренних классах для поддержки прямого типа данных.
Вы не можете декодировать одно значение с помощью протокола Decodable
, потому что базовый API JSONSerialization
вызывается с нет вариантов, поэтому требуется тип коллекции в качестве корневого объекта.
Это именно то, что сообщение об ошибке
JSON text did not start with array or object and option to allow fragments not set
говорит, что Decodable
не позволяет устанавливать такие параметры, как allowFragments
в соответствии с правилами синтаксического анализа json json должен начинаться со словаря, поэтому вам нужно поместить это значение в словарь с форматированием значения ключа, иначе оно не будет преобразовано.