Разбор JSON с неверно спроектированной структурой в Swift - PullRequest
0 голосов
/ 21 июня 2019

Я должен проанализировать действительно ужасный дизайн JSON, и, честно говоря, я никогда не сталкивался с таким. Ниже приведен упрощенный вырез из всего файла JSON:

{
    "5ee70183-87fe-4799-802e-ef7f5e7323db": 
    {
        "title": "Bank 1",
        "logo": "655ee02d87cf4cdf912c3507233b0520.gif"
    },
    "332c7078-97ad-4bf7-b8ee-44d85a9c88d1": 
    {
        "title": "Bank 2",
        "logo": "655ee02d87cf4cdf912c3507233b0520.gif"
    },
    "8e9bd4c8-6f4a-4663-ae86-b8fbaf295030": 
    {
        "title": "Bank 3",
        "logo": "655ee02d87cf4cdf912c3507233b0520.gif"
    }
}

Как видите, «корневыми» ключами являются некоторые UUID. Эти ключи со значениями должны быть списком, но вместо правильных скобок [] для списка используется {} неправильный. Если я анализирую это, используя кодируемые файлы, мне приходится создавать структуры с именами UUID, но что хуже всего, этот «список» не является фиксированным, а теоретически остается неограниченным. Поэтому моя работа состоит в том, чтобы проанализировать этот JSON и получить массив банковских объектов. Поскольку в настоящий момент я в шоке и растерянности, я просто думаю, что не могу использовать кодируемые файлы, и мне нужно проанализировать это вручную в словаре и получить оттуда свойства, назначив правильный элемент списка. Если вы когда-либо сталкивались с такой проблемой или знаете лучший вариант синтаксического анализа, это очень поможет мне справиться с этим.

1 Ответ

1 голос
/ 21 июня 2019

Вам нужно

let res = try! JSONDecoder().decode([String:Root].self,from:data)
print(Array(res.values))

struct Root: Codable {
   let title, logo: String
}
...