· 1 min read

How to parse JSON in Swift using Codable protocol?


In this Swift tutorial, I'd like to give you an example about getting and parsing JSON data using URLSession and Codable protocol.

Dependencies

First of all just a few words about dependencies. From Swift 4 you don’t need any dependency to parse JSON data, because there are built-in protocols to take care of everything. If you are still using some kind of 3rd-party you should definitely ditch it for the sake of simplicity. By the way before you add any external dependency into your project, please think twice. 🤔

Networking

If your task is simply to load some kind of JSON document through HTTP from around the web, - surprise - you won’t need Alamofire at all. You can use the built-in URLSession class to make the request, and get back everything that you’ll need. The Foundation networking stack is already a complex and very useful stack, don’t make things even more complicated with extra layers.

JSON parsing

Now, after the short intro, let’s dive in and get some real fake JSON data from the JSONPlaceholder web service. I’m going to place the whole thing right here, you can select it, copy and paste into a Swift playground file.

import Foundation
import PlaygroundSupport

PlaygroundPage.current.needsIndefiniteExecution = true

struct Post: Codable {

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

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

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

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

    // feel free to uncomment this for debugging data
    // print(String(data: data, encoding: .utf8))

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

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

As you can see downloading and parsing JSON from the web is a really easy task. This whole code snippet is around 50 lines of code. Of course it’s just a proof of concept, but it works and you don’t need any dependency. It’s pure Swift and Foundation.

To save some typing, you can also generate the final objects directly from the JSON structure with these amazing Xcode extensions.

The Codable protocol - which is actually a compound typealias from Encodable & Decodable protocols - makes the process of parsing JSON data in Swift magical. 💫

Related posts

· 6 min read

All about the Bool type in Swift


Learn everything about logical types and the Boolean algebra using the Swift programming language and some basic math.

· 4 min read

Async HTTP API clients in Swift


Learn how to communicate with API endpoints using the brand new SwiftHttp library, including async / await support.

· 9 min read

Beginners guide to functional Swift


The one and only tutorial that you'll ever need to learn higher order functions like: map, flatMap, compactMap, reduce, filter and more.

Learn To Code Using Swift cover image

Get the Learn To Code Using Swift book

Learn To Code Using Swift is a programming book for absolute beginners, born from a fresh approach. It promises beginner-friendly explanations even for complex topics and provides up-to-date Swift knowledge. The book builds progressively from the basics to advanced concepts without expecting any prior programming experience — it clearly explains every idea, definition, and code snippet. It also teaches algorithmic thinking and reasoning skills necessary to thrive even in the age of LLMs. Theory and practice go hand in hand, with more than 350 exercises included to build confidence and solid foundations. Most of the modern Swift language features are covered, making this book a great base for anyone regardless of specific platform or interest.

Available on Gumroad