HomeiOS DevelopmentThe right way to parse JSON in Swift utilizing Codable protocol?

The right way to parse JSON in Swift utilizing Codable protocol?


Dependencies

To begin with just some phrases about dependencies. From Swift 4 you do not want any dependency to parse JSON knowledge, as a result of there are built-in protocols to care for every part. In case you are nonetheless utilizing some sort of Third-party you need to undoubtedly ditch it for the sake of simplicity. By the way in which earlier than you add any exterior dependency into your mission, please suppose twice. 🤔

Networking

In case your activity is solely to load some sort of JSON doc via HTTP from across the internet, – shock – you will not want Alamofire in any respect. You need to use the built-in URLSession class to make the request, and get again every part that you will want. The Basis networking stack is already a fancy and really helpful stack, do not make issues much more sophisticated with further layers.

JSON parsing

Now, after the quick intro, let’s dive in and get some actual faux JSON knowledge from the JSONPlaceholder internet service. I will place the entire thing proper right here, you may choose it, copy and paste right into a Swift playground file.

import Basis
import PlaygroundSupport

PlaygroundPage.present.needsIndefiniteExecution = true

struct Submit: Codable {

    enum CodingKeys: String, CodingKey {
        case id
        case title
        case physique
        case userIdentifier = "userId"
    }

    let id: Int
    let title: String
    let physique: String
    let userIdentifier: Int
}

let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!

URLSession.shared.dataTask(with: url) { knowledge, response, error in
    if let error = error {
        print("Error: (error.localizedDescription)")
        PlaygroundPage.present.finishExecution()
    }
    guard 
        let httpResponse = response as? HTTPURLResponse, 
        httpResponse.statusCode == 200 
    else {
        print("Error: invalid HTTP response code")
        PlaygroundPage.present.finishExecution()
    }
    guard let knowledge = knowledge else {
        print("Error: lacking knowledge")
        PlaygroundPage.present.finishExecution()
    }

    

    do {
        let decoder = JSONDecoder()
        let posts = attempt decoder.decode([Post].self, from: knowledge)

        print(posts.map { $0.title })
        PlaygroundPage.present.finishExecution()
    }
    catch {
        print("Error: (error.localizedDescription)")
        PlaygroundPage.present.finishExecution()
    }
}.resume()

As you may see downloading and parsing JSON from the net is a very easy activity. This complete code snippet is round 50 traces of code. After all it is only a proof of idea, but it surely works and you do not want any dependency. It is pure Swift and Basis.

To save some typing, you too can generate the ultimate objects instantly from the JSON construction with these superb Xcode extensions.

The Codable protocol – which is definitely a compound typealias from Encodable & Decodable protocols – makes the method of parsing JSON knowledge in Swift magical. 💫

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments