Я использую swift 4 для обработки json, возвращаемого из вызова URLSession. json сохраняется в словаре (кэш типа ) после вызова с использованием строки URL в качестве ключа. Затем я хочу обработать json в пользовательский объект с именем ApodJSON. Иногда возвращаемый json представляет собой массив моего объекта ApodJSON, а иногда это один ApodJSON.
когда я использую новый JsonDecoder images = try JSONDecoder().decode([ApodJSON].self, from: data)
Swift, я получаю сообщение об ошибке, если ранее код json возвращал отдельный объект, то есть «Ожидается декодирование массива, но вместо этого найден словарь».
Как я могу проверить, являются ли данные json массивом данных json или отдельным элементом в формате словарь, чтобы я мог вызвать соответствующий метод JSONDecoder. Следующая проверка, если массив данных не работает
// parse json to ApodJSON class object if success true
func processJSON(success: Bool) {
// get the data stored in cache dic and parse to json
// data is of type Data
guard let data = self.dataForURL(url: self.jsonURL), success == true else { return }
do {
var images: [ApodJSON] = []
// check if data is an array of json image data or an indiviual item in dictionary format
if data is Array<Any> {
images = try JSONDecoder().decode([ApodJSON].self, from: data)
} else {
let image = try JSONDecoder().decode(ApodJSON.self, from: data)
images.append(image)
}
for image in images {
print("ImageUrls: \(String(describing: image.url))")
}
} catch let jsonError {
print(jsonError)
}
}