Skip to content

Instantly share code, notes, and snippets.

@KentarouKanno
Created June 26, 2018 23:53
Show Gist options
  • Save KentarouKanno/a0cdc20dd54c1133cb5c828f2433f986 to your computer and use it in GitHub Desktop.
Save KentarouKanno/a0cdc20dd54c1133cb5c828f2433f986 to your computer and use it in GitHub Desktop.

Codable Nested

struct Locations: Codable {
    var plan: [Location]
    
    struct Location: Codable {
        var points: Point
        
        struct Point: Codable {
            var lat: Double?
            var lng: Double?
            var height: Double?
        }
    }
}

var data = """
{"plan":[
{"points":{
"lat":123.111,
"lng":456.222,
"height":50.0
}},
{"points":{
"lat":789.888,
"lng":22.666,
"height":30.0
}}]
}
""".data(using: .utf8)

// Decode
let locations = try? JSONDecoder().decode(Locations.self, from: data!)
if let locations = locations {
    
    for location in locations.plan {
        print(location.points.lat)
        print(location.points.lng)
        print(location.points.height)
    }
}

// Encode
let point1 = Locations.Location(points: Locations.Location.Point(lat: 123.111, lng: 456.222, height: 50.0))
let point2 = Locations.Location(points: Locations.Location.Point(lat: 789.888, lng: 22.666, height: 30.0))
let locations1 = Locations(plan: [point1, point2])

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let encoded = try! encoder.encode(locations1)
print(String(data: encoded, encoding: .utf8)!)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment