У меня есть сложный объект JSON, который выглядит примерно так (он урезан, чтобы просто дать представление о вложенности:
{
"absolute_magnitude_h" = "23.4";
...
"close_approach_data" = (
{
"close_approach_date" = "1994-09-03";
"epoch_date_close_approach" = 778575600000;
"orbiting_body" = Earth;
})
"orbital_data" = {
"aphelion_distance" = "4.058036874987604";
"orbit_class" = {
"orbit_class_type" = APO;
}
}
}
Мой кодируемый объект выглядит так:
struct NEOObj:Codable {
var absoluteMagnitudeH:Float
var designation:String
var isPotentiallyHazardousAsteroid:Bool
var isSentryObject:Bool
var name:String
var nasaJPLURL:String
var neoReferenceID:String
var closeApproachData:[NEOCloseApproachData] = [NEOCloseApproachData]()
var orbitalData:NEOOrbitalData?
private enum CodingKeys: String, CodingKey {
case absoluteMagnitudeH = "absolute_magnitude_h"
case designation = "designation"
case isPotentiallyHazardousAsteroid = "is_potentially_hazardous_asteroid"
case isSentryObject = "is_sentry_object"
case name = "name"
case nasaJPLURL = "nasa_jpl_url"
case neoReferenceID = "neo_reference_id"
case closeApproachData = "close_approach_data"
case orbitalData = "orbital_data"
}
}
struct NEOCloseApproachData:Codable {
var closeApproachDate:String
var orbitingBody:String
var epochDateCloseApproach:Int
enum CodingKeys: String, CodingKey {
case orbitingBody = "orbiting_body"
case closeApproachDate = "close_approach_date"
case epochDateCloseApproach = "epoch_date_close_approach"
}
}
struct NEOOrbitalData: Codable {
var aphelionDistance:Float
enum CodingKeys: String, CodingKey {
case aphelionDistance = "aphelion_distance"
}
}
и мой код:
do {
let thisNEOObj = try? JSONDecoder().decode(NEOObj.self, from: jsonData)
print(thisNEOObj)
} catch {
}
Например, я могу получить ключ / значения верхнего уровня без проблем (absolute_magnitude_h), например, и closeApproachData также заполняется. Но если я пытаюсь получить orbital_data, то thisNEOObj становится нулевым. Iеще даже не пытался получить класс orbit_class.: (
Куда я иду?