Разбор массива со структурой {"Name": String, "Value": String} в Swift 4 - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужно проанализировать в Swift структуру данных, похожую на эту (основанную на JSON):

[
  {
   "Name": "uniquename",
   "Value": "John"
  }, 
  {
   "Name": "locale",
   "Value": "UK"
  }, 
]

Я сохранил этот узел в struct, как это

struct Rowset : Decodable {
  var row: LoggedUserSession

  init(loggedUser: [LoggedUserSession]){
    self.row = loggedUser[0]
  }

  enum CodingKeys: String, CodingKey{
    case row = "Row"
  }
}

Я подготовил struct аналогично всем данным, которые мне нужно извлечь из массива, но я не знаю, как выполнить итерацию и вернуть значение, когда строка имени совпадает с моим регистром.

struct LoggedUserSession : Decodable {
  var username: String;
  var locale: String;


  init(username: String, locale: String) {
    // In JS I would embedd an iterator here and return the values 
    self.username = username
    self.locale = locale
  }

  enum CodingKeys: String, CodingKey {
    case username = "uniquename"
    case locale = "locale"
  }
}

1 Ответ

0 голосов
/ 13 апреля 2019

Если я правильно понимаю, что вы говорите, вы хотите разобрать массив LoggedUserSession JSON в быстрый массив LoggedUserSession с. Если это так, то вы почти у цели.

Для полноты я собираюсь интерпретировать JSON, который вы опубликовали, следующим образом, чтобы он действовал:

{"loggedUserSessions":
  [
    {
     "uniquename": "John",
     "locale": "UK"
    }
  ]
}

Ваш LoggedUserSession объект реализован правильно, поэтому теперь все, что вам нужно, это часть разбора массива. Вы можете сделать это с помощью следующей структуры:

struct SessionList: Decodable {

  let sessions: [LoggedUserSession]

}

Вызов этого с помощью JSONDecoder и ваши данные JSON должны сериализовать ваш список в массив, к которому можно получить доступ через свойство SessionList sessions.

...