Анализировать допустимые объекты из массива JSON в Swift - PullRequest
0 голосов
/ 13 июля 2020

У меня есть такая кодируемая структура

struct User: Codable {
    let id: String
    let registrationId: String
    let firstName: String?
    let lastName: String?
}

Теперь ответ от сервера содержит массив, подобный этому

 [
  {
    "id": "1",
    "registrationId": "r1",
    "firstName": "Jon",
    "lastName": "Doe"
  },
  {
    "id": "2",
    "registrationId": null,
    "firstName": null,
    "lastName": null
  },
  {
    "id": "3",
    "registrationId": null,
    "firstName": null,
    "lastName": null
  },
  {
    "id": "4",
    "registrationId": "r4",
    "firstName": "Jon",
    "lastName": "Snow"
  }
]

Я хочу проанализировать это как [Пользователь], но только те, у кого есть действительный (не нуль) registrationId. Я знаю, как быстро разобрать JSON. Но проблема здесь в том, что из-за двух недопустимых данных в середине весь ответ будет иметь ошибку декодирования. Но я хочу проанализировать его как массив [User], содержащий действительные (в данном случае первый и последний объект).

Любые подсказки или помощь очень приветствуются.

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

1- Сделайте registrationId необязательным

 let registrationId: String?

2-

 let res = try JSONDecoder().decode([User].self,from:data)
 let filtered = res.filter { $0.registrationId != nil }
0 голосов
/ 13 июля 2020

в конце концов, эти данные должны поступать из базы данных или массива. Сделав параметр id в качестве первичного ключа, параметр registrationId в качестве внешнего ключа, и если вы работаете с параметром registrationId, вы можете создать продуктивную последовательность или, если он находится в массиве, вы можете связать метод, который генерирует последовательность для этого идентификатора регистрации.

...