Ich benutze Swift 4, um json von einem URLSession-Aufruf zurückgegeben verarbeiten. Der JSON wird nach dem Aufruf in einem Wörterbuch (Cache des Typs) gespeichert, wobei die URL-Zeichenfolge als Schlüssel verwendet wird. Ich möchte dann den JSON zu einem benutzerdefinierten Objekt namens ApodJSON verarbeiten. Manchmal ist der zurückgegebene json ein Array meines ApodJSON-Objekts und manchmal sein einziger ApodJSON.Wie überprüfen, ob JSON-Rückgabewert in Form eines Arrays oder eines Wörterbuchs ist
wenn ich Swifts neue JsonDecoder verwenden images = try JSONDecoder().decode([ApodJSON].self, from: data)
Ich erhalte eine Fehlermeldung, wenn die json zuvor Code ein einzelnes Objekt also wieder „Expected Array zu entschlüsseln, aber einen Wörterbuch statt gefunden.“
Wie kann ich überprüfen, ob die JSON-Daten ist ein Array von JSON-Daten oder ein indiviual Artikel in Wörterbuch Format mir zu erlauben, die entsprechende JSONDecoder Methode aufzurufen. Die folgenden Check wenn Daten Array funktionieren nicht
// 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)
}
}
ja, die thx gearbeitet. Ich bin mir nicht sicher, ob es andere Möglichkeiten gibt, Upfront zu überprüfen, aber das hat erreicht, was ich versucht habe zu tun – lozflan