Search code examples
iosjsonswiftcodabledecodable

Swift Codable null handling


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.


Solution

  • 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.