2017-12-31 121 views
1

Ich versuche, JSON mit Dekodierbare zu analysieren, die die folgende Struktur hat und ich geworfen bin wird die Fehlermeldung:Dekodieren von JSON mit unterschiedlichen Schlüssel-Wert-Paar mit Dekodierbare

does not confirm to protocol "Decodable"

Die JSON Struktur sieht aus, als solche:

{ 
    base = SGD; 
    date = "2017-12-29"; 
    rates =  { 
     AUD = "0.95769"; 
     BGN = "1.2205"; 
     THB = "24.414"; 
     TRY = "2.8372"; 
     USD = "0.74844"; 
     ZAR = "9.2393"; 
    }; 
} 

Beachten Sie, dass ich die Größe des JSON-Objekts zur besseren Lesbarkeit verkleinert habe.

Das Problem hier ist, dass die Preise alle unterschiedliche Schlüssel-Wert-Paare sind, die im Gegensatz zu den Pfosten here und here sind. Mein Code so weit als solche:

struct Fixer: Decodable { 
    let base: String 
    let date: String 
    let rates: [AnyObject] 
} 

//at dataTasks 
do { 
    let results = try JSONDecoder().decode(Fixer.self, from: data) 
    print(results.base) 
} catch error as NSError { 
    print(error?.localizedDescription) 
} 

Es wäre hilfreich, wenn jemand unter solchen JSON-Struktur mit unterschiedlichen Schlüssel-Wert-Paaren beraten könnte, wie sollte man die Struktur schreiben?

Mein Hinweis: video

Antwort

0

Der Wert für die Schlüssel rates ist ein Wörterbuch, kein Array.

Der vernünftigste Weg ist, um das Objekt zu einem Wörterbuch

let rates: [String:String] 

Alternativ erstellen eine Struktur Rate (zum Beispiel mit Mitgliedern currency und value) und schreiben Sie einen benutzerdefinierten initializer dekodieren das Wörterbuch zur Karte (key ->currency und value ->value) auf ein Array von Rate

Hinweis: Bedenken Sie, dass weder unspecified AnyObject noch Any kann als Zieltyp verwendet werden.

+0

Danke! Einfach und süß! [String: String] funktioniert alles gut. – Koh