Swift Codable null handling

Ekra picture Ekra · Apr 18, 2018 · Viewed 20k times · Source

I have a struct that parse JSON using Codable.

struct Student: Codable {
    let name: String?
    let amount: Double?
    let adress: String?
}

Now if the amount value is coming as null the JSON parsing is failing.

So should I manually handle the null cases for all the Int and Double that are present in the Student struct?

The String values coming as null is automatically handled.

Answer

Patru picture Patru · Apr 18, 2018

Let me do this Playground for you since an example shows you more than a hundred words:

import Cocoa

struct Student: Codable {
    let name: String?
    let amount: Double?
    let adress: String?
}

let okData = """
{
   "name": "here",
 "amount": 100.0,
 "adress": "woodpecker avenue 1"
}
""".data(using: .utf8)!

let decoder = JSONDecoder()
let okStudent = try decoder.decode(Student.self, from:okData)
print(okStudent)

let nullData = """
{
   "name": "there",
 "amount": null,
"adress": "grassland 2"
}
""".data(using: .utf8)!

let nullStudent = try decoder.decode(Student.self, from:nullData)
print(nullStudent)

null is handled just fine if you define your structs using optionals. I would however advise against it if you can avoid it. Swift provides the best support I know to help me not forgetting to handle nil cases wherever they may occur, but they are still a pain in the ass.