Как проверить, находится ли возвращаемое значение json в виде массива или словаря

Я использую 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)
    }
}

person lozflan    schedule 15.11.2017    source источник


Ответы (1)


person    schedule
comment
да, это сработало, спасибо. не уверен, есть ли другие способы проверить заранее, но это достигло того, что я пытался сделать - person lozflan; 18.01.2018