Processamento JSON em Swift: Codable, JSONSerialization, SwiftJSON

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) é o formato principal de troca de dados em aplicativos iOS/macOS modernos. Swift fornece um conjunto poderoso de ferramentas para trabalhar com JSON, desde os protocolos internos Codable até bibliotecas de terceiros que simplificam o parsing e a serialização. Neste artigo, vamos detalhar todas as principais formas de processar JSON em Swift para as plataformas Apple.



Suporte interno a JSON: Codable (Swift 4+)

A partir do Swift 4, a Apple apresentou os protocolos Codable (que combina Encodable e Decodable), que permitem converter automaticamente tipos de dados personalizados para JSON e vice-versa sem escrever código boilerplate.



Exemplo básico de decodificação JSON

import Foundation

// 1. Definimos o modelo de dadosstruct User: Codable { let id: Int let name: String let email: String let isActive: Bool}

// 2. String JSONlet jsonString = """{ "id": 1, "name": "Ivan Petrov", "email": "ivan@example.com", "isActive": true}"""

// 3. Decodificamosif 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)") }}


Codificando um objeto para JSON

let newUser = User(id: 2, name: "Maria Sidorova", email: "maria@example.com", isActive: false)

let encoder = JSONEncoder()encoder.outputFormatting = .prettyPrinted // para saída legível

do { let jsonData = try encoder.encode(newUser) if let jsonString = String(data: jsonData, encoding: .utf8) { print(jsonString) }} catch { print("Erro de codificação: \\(error)")}


Trabalhando com chaves em snake_case e estratégias personalizadas

Frequentemente, o JSON chega com chaves no estilo snake_case (por exemplo, first_name), enquanto as propriedades Swift são escritas em camelCase (firstName). Isso é resolvido com uma linha:

decoder.keyDecodingStrategy = .convertFromSnakeCaseencoder.keyEncodingStrategy = .convertToSnakeCase


JSONSerialization — trabalho de baixo nível

Para casos onde a estrutura do JSON é desconhecida antecipadamente ou é necessária flexibilidade, usa-se JSONSerialization do Foundation:

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

Este método retorna Any, portanto é necessário fazer type casting. Adequado para dados dinâmicos, mas menos seguro em termos de tipos.



Bibliotecas de terceiros

Apesar do poder das ferramentas internas, existem bibliotecas populares que simplificam o trabalho com JSON em Swift:



1. SwiftyJSON

Uma das bibliotecas mais populares. Permite acessar elementos JSON através de subscritos (subscripts) e lida automaticamente com valores opcionais.

// Instalação via Swift Package Manager: https://github.com/SwiftyJSON/SwiftyJSONimport SwiftyJSON

let json = JSON(parseJSON: jsonString)let userName = json["name"].stringValuelet userEmail = json["email"].string ?? "não informado"print("Nome: \\(userName), Email: \\(userEmail)")

// Trabalhando com objetos aninhadoslet address = json["address"]["city"].stringValue


2. ObjectMapper

Biblioteca para mapeamento de JSON para objetos e vice-versa. Requer

Recommendations