Processamento JSON em Swift: Codable, Foundation e SwiftyJSON para iOS/macOS

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Processamento JSON em Swift (iOS/macOS): guia completo



JSON (JavaScript Object Notation) é um dos formatos de troca de dados mais populares em aplicações modernas. No ecossistema Apple (iOS, macOS, watchOS, tvOS), o Swift oferece várias maneiras poderosas para trabalhar com JSON. Neste artigo, abordaremos três abordagens principais: o nativo Codable, o de baixo nível JSONSerialization e a popular biblioteca de terceiros SwiftyJSON. Você aprenderá como fazer parsing, criar e processar JSON em Swift com exemplos de código.



1. Codable — o padrão moderno do Swift



A partir do Swift 4, a Apple introduziu os protocolos Codable (que combina Encodable e Decodable). Esta é a maneira mais conveniente e type-safe de trabalhar com JSON. Basta declarar uma struct ou classe que esteja em conformidade com Codable e usar JSONEncoder/JSONDecoder.



Exemplo: parsing de JSON de uma resposta de API



import Foundation

// Definindo o modelo, automaticamente em conformidade com Codablestruct User: Codable { let id: Int let name: String let email: String let isActive: Bool}

// Exemplo de string JSONlet jsonString = """{ "id": 42, "name": "Ivan Petrov", "email": "ivan@example.com", "isActive": true}"""

// Parsingif let jsonData = jsonString.data(using: .utf8) { let decoder = JSONDecoder() do { let user = try decoder.decode(User.self, from: jsonData) print("Usuário: \\(user.name), email: \\(user.email)") } catch { print("Erro de decodificação: \\(error.localizedDescription)") }}


Exemplo: criando JSON a partir de um objeto



let user = User(id: 1, name: "Anna Smirnova", email: "anna@test.com", isActive: false)let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrinted // para formatação bonita

if let jsonData = try? encoder.encode(user), let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString)}


Trabalhando com estruturas aninhadas e arrays



struct Company: Codable {    let name: String    let employees: [User]}

let companyJson = """{ "name": "TechCorp", "employees": [ {"id": 1, "name": "Oleg", "email": "oleg@tc.com", "isActive": true}, {"id": 2, "name": "Maria", "email": "maria@tc.com", "isActive": false} ]}"""

if let data = companyJson.data(using: .utf8), let company = try? JSONDecoder().decode(Company.self, from: data) { print("Empresa: \\(company.name), funcionários: \\(company.employees.count)")}


2. JSONSerialization — abordagem clássica (Foundation)



Antes do Codable, a principal ferramenta era o JSONSerialization do Foundation. Ele trabalha com dicionários e arrays do Foundation ([String: Any] e [Any]). Este método é útil quando a estrutura do JSON é desconhecida antecipadamente ou é muito dinâmica.



Exemplo: parsing com JSONSerialization



if let data = jsonString.data(using: .utf8) {    do {        if let dict = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {            let id = dict["id"] as? Int ?? 0            let name = dict["name"] as? String ?? "Desconhecido"            print("ID: \\(id), Nome: \\(name)")        }    } catch {        print("Erro: \\(error)")    }}


Desvantagem: falta de type safety — é necessário fazer casting manual dos tipos, o que pode levar a erros em tempo de execução. Recomenda-se usar Codable sempre que possível.



3. SwiftyJSON — biblioteca de terceiros conveniente



SwiftyJSON é uma biblioteca popular de código aberto

Recommendations