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
Também na biblioteca
GraphQL em C# (.NET): bibliotecas Hot Chocolate e GraphQL.NET para criação de APIs
Ktor Client — Cliente HTTP para Kotlin
Agendador de Tarefas Java: Quartz Scheduler — Guia Completo
Matchers do Catch2 para C++: guia completo com exemplos práticos