{
"values":[
[1,1,7,"Azuan Child","Anak Azuan","12345","ACTIVE","Morning",7,12,"2017-11-09 19:45:00"],
[28,1,0,"Azuan Child2","Amran","123456","ACTIVE","Evening",1,29,"2017-11-09 19:45:00"]
]
}
Ok, das ist mein json-Format, das ich vom Server empfangenSwift 4 JSON Dekodierbare mit multidimensionalen und Mehrfachtyp Array
Im Moment habe ich es in meine Struktur entschlüsseln wollen, aber noch kein Glück drauf.
struct ChildrenTable: Decodable {
var values: [[String]]?
}
Und mein Anrufer Methode auf URLSession dieser
URLSession.shared.dataTask(with: request) { (data, response, err) in
guard let data = data else { return }
let dataAsString = String(data: data, encoding: .utf8)
print(dataAsString)
do {
let children = try
JSONDecoder().decode(ChildrenTable.self, from: data)
print (children)
} catch let jsonErr {
print ("Error serializing json: ", jsonErr)
}
}.resume()
aussehen und die Fehler, die ich habe sind
Error serializing json:
typeMismatch(Swift.String, Swift.DecodingError.Context(codingPath: [Vito_Parent.ChildrenTable.(CodingKeys in _1B826CD7D9609504747BED0EC0B7D3B5).values, Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0)),
Foundation.(_JSONKey in _12768CA107A31EF2DCE034FD75B541C9)(stringValue: "Index 0", intValue: Optional(0))],
debugDescription: "Expected to decode String but found a number instead.", underlyingError: nil))
Ich weiß, in dem Array ein int gibt es und ich nur String werfen für die Werte var values: [[String]]?
(der Grund, warum dieser Fehler Popup), aber ich kann einfach nicht mehrdimensionale Array oder Tupel in meinen Strukturen, da es dem Protokoll von Decodable folgen.
Ich kann auch nicht die Daten in Wörterbuch konvertieren, da es Fehler werfen „Expected Wörterbuch entschlüsseln, aber gefunden Array statt“
Irgendwelche Ideen auf, dieses Problem zu lösen? Ich habe versucht, String-Typ auf Daten, aber immer noch kein Glück ...
p/s: Wenn alle Json-Format sind in String-Typ, es gäbe kein Problem, aber ich habe nicht die Erlaubnis, das zu ändern, da ich anrufe es von API.
Dank, sehr nett, aber das ist die beste Praxis auszuführen Verwendung für einzelne Zeichenfolge, Single-Array und mehrdimensionales Array sein, wenn mit mehreren Umgang Geben Sie ein Array von JSON ein, das für JSONDecoder verwendet werden soll. –
Es ist das erste Mal, dass ich mit Multi-Typ-Array konfrontiert. Um ehrlich zu sein, ich dachte, dass Json ungültig ist. Persönlich, anstatt ein Array von Multi-Typ-Array zu senden, würde ich ein Array von Objekten aus dem Backend senden. –
Es könnte besser sein, eine Enum als eine Struktur zu verwenden - wenn das mit einem Decoder möglich ist. – JeremyP