JSON 到多维数组

JSON to Multidimensional Array

我正在尝试从 HTTP POST 中获取我的 JSON 并将其放入多维数组中以用于 Swift 中的节/table 单元格。

我希望每个 table 部分都使用这些动态键 (submitid) 并为每个部分插入单元格数据:

15302992338145
15301374235890
15302930963080

我的JSON:

let swiftyJsonVar = JSON(data!)

{
  "data" : {
    "15302992338145" : [
      {
        "date" : "2018-06-27",
        "username" : "user1",
        "submitid" : 15302992338145,
        "notes" : "Testing"
      },
      {
        "date" : "2018-06-28",
        "username" : "user1",
        "submitid" : 15302992338145,
        "notes" : "Testing"
      }
    ],
    "15301374235890" : [
      {
        "date" : "2018-06-21",
        "username" : "user2",
        "submitid" : 15301374235890,
        "notes" : "Comments one two three"
      },
      {
        "date" : "2018-06-22",
        "username" : "user2",
        "submitid" : 15301374235890,
        "notes" : "N/A"
      }
    ],
    "15302930963080" : [
      {
        "date" : "2018-07-03",
        "username" : "user3",
        "submitid" : 15302930963080,
        "notes" : "Hello"
      }
    ]
  }
}

我试过了,但没有成功:

if let resData = swiftyJsonVar["data"][].arrayObject {
    self.arrRes = resData as! [String: [[String:AnyObject]]]
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return arrRes.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tableCell", forIndexPath: indexPath)

    // Configure the cell...
    var dict = arrRes[indexPath.section][indexPath.row]

    cell.dateLabel?.text = dict["date"]

    return cell
}

你应该停止使用 SwiftyJSON 并升级到 Swift 4 和 Decodable:

struct User : Decodable {
    let date : String
    let username : String
    let submitid : Int
    let notes : String
}
struct Result : Decodable {
    let data : [[User]]
    struct AnyCodingKey : CodingKey {
        var stringValue: String
        var intValue: Int?
        init(_ codingKey: CodingKey) {
            self.stringValue = codingKey.stringValue
            self.intValue = codingKey.intValue
        }
        init(stringValue: String) {
            self.stringValue = stringValue
            self.intValue = nil
        }
        init(intValue: Int) {
            self.stringValue = String(intValue)
            self.intValue = intValue
        }
    }
    init(from decoder: Decoder) throws {
        let con = try! decoder.container(keyedBy: AnyCodingKey.self)
        let intermediate = try! con.decode([String:[User]].self, 
            forKey: AnyCodingKey(stringValue:"data"))
        var data = [[User]]()
        for d in intermediate {
            data.append(d.value)
        }
        self.data = data
    }
}
// jsondata is your original JSON data, as you downloaded it
let result = try! JSONDecoder().decode(Result.self, from: jsondata)

之后result.data是User数组的数组

[[User(date: "2018-07-03", username: "user3", 
       submitid: 15302930963080, notes: "Hello")], 
 [User(date: "2018-06-27", username: "user1", 
       submitid: 15302992338145, notes: "Testing"), 
  User(date: "2018-06-28", username: "user1", 
       submitid: 15302992338145, notes: "Testing")], 
 [User(date: "2018-06-21", username: "user2", 
       submitid: 15301374235890, notes: "Comments one two three"), 
  User(date: "2018-06-22", username: "user2", 
       submitid: 15301374235890, notes: "N/A")]]