Tips on how to parse JSON in Swift utilizing Codable protocol?

Tips on how to parse JSON in Swift utilizing Codable protocol?



· 1 min learn


On this Swift tutorial, I would like to offer you an instance about getting and parsing JSON knowledge utilizing URLSession and Codable protocol.

Dependencies

To start with only a few phrases about dependencies. From Swift 4 you don’t want any dependency to parse JSON knowledge, as a result of there are built-in protocols to deal with the whole lot. If you’re nonetheless utilizing some type of Third-party it is best to positively ditch it for the sake of simplicity. By the best way earlier than you add any exterior dependency into your challenge, please assume twice. 🤔

Networking

In case your job is solely to load some type of JSON doc by way of HTTP from across the internet, – shock – you received’t want Alamofire in any respect. You need to use the built-in URLSession class to make the request, and get again the whole lot that you just’ll want. The Basis networking stack is already a fancy and really helpful stack, don’t make issues much more difficult with additional layers.

JSON parsing

Now, after the brief intro, let’s dive in and get some actual pretend JSON knowledge from the JSONPlaceholder internet service. I’m going to position the entire thing proper right here, you possibly can 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()
    }

    // be at liberty to uncomment this for debugging knowledge
    // print(String(knowledge: knowledge, encoding: .utf8))

    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 possibly can see downloading and parsing JSON from the net is a very easy job. This entire code snippet is round 50 traces of code. After all it’s only a proof of idea, however it works and also you don’t want any dependency. It’s pure Swift and Basis.

NOTE: To save some typing, you too can generate the ultimate objects immediately from the JSON construction with these wonderful 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. 💫

Associated posts


Be taught the whole lot about logical sorts and the Boolean algebra utilizing the Swift programming language and a few primary math.


Discover ways to talk with API endpoints utilizing the model new SwiftHttp library, together with async / await help.


The one and solely tutorial that you’re going to ever have to study greater order capabilities like: map, flatMap, compactMap, cut back, filter and extra.


Be taught the very fundamentals about protocols, existentials, opaque sorts and the way they’re associated to generic programming in Swift.

Leave a Reply

Your email address will not be published. Required fields are marked *