我的应用程序有一些不同的视图控制器,这些控制器从我的Web服务接收JSON数据并将其解析为表视图。这是行不通的。
这是我尝试解析为TableViewController的JSON数据的示例
“ content_4_4”:{“ Sku”:“ W-22”,“ Qty”:“ 1”,“ Desc”:“ Panel”,“ Condition”:“”},“ content_4_5”:{“ Sku” :“ W-15”,“ Qty”:“ 1”,“ Desc”:“ Desk 44 \” long“,” Condition“:”“},” content_4_6“:{” Sku“:” W-18“, “ Qty”:“ 1”,“ Desc”:“ End Return Panel”,“ Condition”:“”},“ content_4_7”:{“ Sku”:“ W-25”,“ Qty”:“ 1”,“ Desc“:” End Return Panel“,” Condition“:”“},” content_4_8“:{” Sku“:” W-19“,” Qty“:” 1“,” Desc“:”带灯头,变压器”,“条件”:“”}
这是我用来对数据建模的可编码结构。
struct Components: Codable {
var result: [Component]
}
struct Component: Codable {
var Sku: String
var Qty: String
var Desc: String
var Condition: String
}
这是我尝试将json解析为组件的方式
let decoder = JSONDecoder()
if let jsonUnits = try? decoder.decode(Components.self, from: data) {
UnitComponents = jsonUnits.result
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
可重复使用的单元格中没有任何显示。因为我可以看到数据,所以我确定我解析错误,否则数据中的某些内容可能会破坏解析器。也许正斜杠或标题的存在。 “ content_4_4”正在破坏解析器。不确定任何帮助表示赞赏。
答案 0 :(得分:1)
您需要
var unitComponents = [Component]()
do {
let jsonUnits = try JSONDecoder().decode([String:Component].self, from: data)
unitComponents = Array(jsonUnits.values)
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
catch {
print(error)
}
struct Component: Codable {
let sku, qty, desc, condition: String
enum CodingKeys: String, CodingKey {
case sku = "Sku"
case qty = "Qty"
case desc = "Desc"
case condition = "Condition"
}
}