Я не могу решить следующую проблему. Я получаю массив словарей из JSON с одинаковыми ключами и разными значениями.
Например:
{
"data": [{
"name": "Anna",
"features": {
"age": "18",
"hobby": "football"
}
}, {
"name": "Peter",
"data": {
"age": "16",
"hobby": "computer games"
}
}, {
"name": "Peter",
"data": {
"age": "25",
"hobby": "chess",
"job": "fireman"
}
}
],
"view": ["Peter", "Anna", "Peter"]
}
Это мои структуры для декодирования:
struct Object: Decodable {
let objectData: [DictionaryData]
let bjectView: [String]
}
struct DictionaryData: Decodable {
let name: String
let features: Features?
let data: DataClass?
}
struct DataContainer: Decodable {
let age, hobby: String
let job: String?
}
struct Features: Decodable {
let age, hobby: String
}
Это точка, где я застрял. Я использую фильтр, но он возвращает Bool, пока мне нужно значение словарей:
var items = [ModelItem]()
var singleObject: Object!
func jsonParsing(completionHandler: @escaping (([ModelItem], Error?) -> Void)) {
guard let url = URL(string: jsonUrlString) else { return }
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let data = data else { DispatchQueue.main.async {completionHandler([], error)}
return
}
do {
self.singleObject = try JSONDecoder().decode(Object.self, from: data)
let sequenceArray = self.singleObject.objectView
for i in sequenceArray {
if i == "Peter" {
if let objectName = self.singleObject?.objectData.filter({ return $0.name == "Peter"}) ... {
let firstItem = ModelFirstItem(text: ...) //here should be a value
self.items.append(firstItem)
}
}
else if i == "Anna" {
...
}
}
}
DispatchQueue.main.async {completionHandler(self.items, nil)}
} catch {
print("Error serializing json:", error)
}
} .resume()
}
Как узнать возраст, хобби и работу?
Спасибо!