Я предпочитаю использовать Codable
все время с JSON, даже для более простых типов, поэтому для процента я бы сделал
struct ItemElement: Decodable {
let percentage: Double
enum CodingKeys: String, CodingKey {
case percentage = "Percentage"
}
}
, и нам нужно хранить эти значения в отдельном массиве, объявленном как класссвойство
let percentageList: [Double]()
и кодировка json будет тогда
let decoder = JSONDecoder()
do {
let result = try decoder.decode([ItemElement].self, from: data)
percentageList = result.map { item.percentage }
} catch {
print(error)
}
аналогично для второй части
struct Item: Decodable {
let categories: [String]
let tags: [Tag]
enum CodingKeys: String, CodingKey {
case categories = "Categories"
case tags = "Tags"
}
}
struct Tag: Decodable {
let value, key: String
enum CodingKeys: String, CodingKey {
case value = "Value"
case key = "Key"
}
}
использовать словарь для результата, снова как класссвойство
var values = [String: String]()
и декодирование
let decoder = JSONDecoder()
do {
let result = try decoder.decode(Item.self, from: data)
for item in result.tags {
values[item.key] = values.item.value
}
} catch {
print(error)
}
, а затем в ячейке для кода строки
cell.Categories.text = percentageList[indexpath.row].percentage
cell.Name.text = values["name"]
cell.office.text = values["office"]
Обратите внимание, что этот последний код выглядит очень странно, так как вы нене имеет массива имен / служебных ценностей, судя по вашему json.Может быть, вы упростили его каким-то образом, но приведенный выше код - лучшее, что я могу сделать с приведенной информацией, даже если она неверна