JSON в многомерный массив

Я пытаюсь взять свой JSON из HTTP POST и поместить его в многомерный массив, чтобы использовать его для разделов / ячеек таблицы в Swift.

Я хотел бы, чтобы каждый раздел таблицы использовал эти динамические ключи (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
}

3 вышеуказанных ключа, например 15302992338145, статичны?

Sh_Khan 13.07.2018 00:27

Нет, они будут отличаться от ответа POST ... извините, это был просто пример.

rubberchicken 13.07.2018 00:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам следует прекратить использование 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")]]

Другие вопросы по теме