Я заметил, что хотя Quicktype.io очень хорошо справляется с парсингом JSON в SWIFt, иногда он прибегает к множеству вспомогательных функций и методов. Для последующего было сгенерировано около 15 дополнительных методов. Некоторые из них знакомы, такие как NSNull, однако два незнакомы мне, например JSONAny, и кажется, что должен быть способ их обойти. Например, в классе JSONAny около 12 функций, и он используется для анализа только одного поля, которое не так важно для меня.
Вот как выглядит JSON:
[{"name":"Afghanistan","topLevelDomain":[".af"],"alpha2Code":"AF","alpha3Code":"AFG","callingCodes":["93"],"capital":"Kabul","altSpellings":["AF","Afġānistān"],"region":"Asia","subregion":"Southern Asia","population":27657145,"latlng":[33.0,65.0],"demonym":"Afghan","area":652230.0,"gini":27.8,"timezones":["UTC+04:30"],"borders":["IRN","PAK","TKM","UZB","TJK","CHN"],"nativeName":"افغانستان","numericCode":"004","currencies":[{"code":"AFN","name":"Afghan afghani","symbol":"؋"}],"languages":[{"iso639_1":"ps","iso639_2":"pus","name":"Pashto","nativeName":"پښتو"},{"iso639_1":"uz","iso639_2":"uzb","name":"Uzbek","nativeName":"Oʻzbek"},{"iso639_1":"tk","iso639_2":"tuk","name":"Turkmen","nativeName":"Türkmen"}],"translations":{"de":"Afghanistan","es":"Afganistán","fr":"Afghanistan","ja":"アフガニスタン","it":"Afghanistan","br":"Afeganistão","pt":"Afeganistão","nl":"Afghanistan","hr":"Afganistan","fa":"افغانستان"},"flag":"https://restcountries.eu/data/afg.svg","regionalBlocs":[{"acronym":"SAARC","name":"South Asian Association for Regional Cooperation","otherAcronyms":[],"otherNames":[]}],"cioc":"AFG"}]
Я не буду приводить весь код, что эта структура находится на один уровень ниже основной структуры:
struct CountryReturnedElement: Codable {
//...various fields
let regionalBlocs: [RegionalBloc]
}
// MARK: - RegionalBloc
struct RegionalBloc: Codable {
let acronym, name: String
let otherAcronyms, otherNames: [JSONAny]
}
Который предназначен для декодирования только следующего JSON:
"regionalBlocs":[{"acronym":"SAARC","name":"South Asian Association for Regional Cooperation","otherAcronyms":[],"otherNames":[]}]
Есть ли простой способ разобрать вышеописанное, не прибегая к вспомогательным классам буквально с пятнадцатью функциями и методами. Скорее всего, otherAcronyms и otherNames являются строками, поэтому я думаю, что я мог бы использовать [String?]. Тем не менее, я думаю, что не знаю этого со 100% уверенностью, скорее, с 95% уверенностью.
Спасибо за любые предложения.
[JSONAny]
предоставляется в случае, если входящий формат значения неизвестен. - person Frankenstein   schedule 28.07.2020