Introdução ao trabalho com JSON em Swift
JSON (JavaScript Object Notation) é um formato leve de troca de dados, amplamente utilizado no desenvolvimento mobile e web. Para desenvolvedores iniciantes em Swift (iOS/macOS), saber trabalhar com JSON é uma habilidade obrigatória. Neste artigo, abordaremos duas abordagens principais: a clássica JSONSerialization e o protocolo moderno Codable. Você aprenderá como obter dados da rede, fazer parsing e convertê-los de volta para JSON para enviar ao servidor.
Independentemente de você estar criando um aplicativo de clima, lista de tarefas ou rede social — o JSON será seu companheiro fiel. Vamos começar com um exemplo simples e, gradualmente, avançar para cenários mais complexos.
Fundamentos do JSON em Swift: estrutura e tipos de dados
Antes de escrever código, é importante entender como o JSON se parece. Em Swift, o JSON é representado como dicionários ([String: Any]) e arrays ([Any]). Os principais tipos de dados em JSON são:
- Strings — entre aspas duplas (
"Olá") - Números — inteiros e de ponto flutuante (
42,3.14) - Valores booleanos —
trueoufalse - Arrays — listas ordenadas de valores (
[1, 2, 3]) - Objetos — coleções não ordenadas de pares "chave-valor" (
{"chave": "valor"}) - null — valor vazio
Em Swift, para representar JSON, é conveniente usar estruturas de dados nativas. Vejamos um exemplo de um objeto JSON simples:
{ "nome": "João", "idade": 25, "ehEstudante": false, "hobbies": ["leitura", "programação"]}Agora vamos ver como trabalhar com esse formato no código Swift.
Parsing de JSON com JSONSerialization (método clássico)
Antes do surgimento do protocolo Codable, os desenvolvedores usavam a classe JSONSerialization. Esse método ainda é relevante, especialmente quando a estrutura do JSON é desconhecida antecipadamente ou muito dinâmica.
Exemplo básico de parsing
Suponha que temos uma string JSON que precisa ser convertida em objetos Swift:
let jsonString = """{ "nome": "Maria", "idade": 30, "estaEmpregada": true}"""
if let jsonData = jsonString.data(using: .utf8) { do { if let dicionario = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] { let nome = dicionario["nome"] as? String ?? "Desconhecido" let idade = dicionario["idade"] as? Int ?? 0 let estaEmpregada = dicionario["estaEmpregada"] as? Bool ?? false print("Nome: \\(nome), Idade: \\(idade), Empregada: \\(estaEmpregada)") } } catch { print("Erro ao fazer parsing do JSON: \\(error.localizedDescription)") }}Observe: após obter o dicionário, fazemos a conversão explícita de cada elemento para o tipo desejado. Isso pode ser inconveniente quando há muitos campos.
Trabalhando com arrays em JSON
Frequentemente, o JSON contém arrays de objetos. Vamos analisar um exemplo com um array de usuários:
let jsonArrayString = """[ {"nome": "Ana", "idade": 22}, {"nome": "Pedro", "idade": 28}]"""
if let data = jsonArrayString.data(using: .utf8) { do { if let usuarios = try JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] { for usuario in usuarios { let nome = usuario["nome"] as? String ?? "" let idade = usuario["idade"] as? Int ?? 0 print("\\(nome): \\(idade) anos") } } } catch { print("Erro: \\(error)") }}O método JSONSerialization é simples, mas requer muita conversão manual de tipos. Para projetos modernos, a Apple recomenda o uso de Codable.