如何在Swift 5中解析此JSON数据?

时间:2019-07-23 19:40:14

标签: json swift

我的应用程序有一些不同的视图控制器,这些控制器从我的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”正在破坏解析器。不确定任何帮助表示赞赏。

1 个答案:

答案 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"
  }
}