Trabalho com JSON em Swift: parsing e serialização para iniciantes

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

Trabalho com JSON em Swift: parsing e serialização para iniciantes

\n\n

JSON (JavaScript Object Notation) é o formato de troca de dados mais popular em aplicativos móveis e web modernos. Se você desenvolve para iOS ou macOS em Swift, saber fazer parsing e serializar JSON é uma habilidade obrigatória. Neste artigo, abordaremos todas as principais formas de trabalhar com JSON: desde o clássico JSONSerialization até o protocolo moderno Codable. O material é voltado para desenvolvedores iniciantes que já conhecem os fundamentos do Swift.

\n\n

O que é JSON e por que ele é necessário no Swift?

\n\n

JSON é um formato textual baseado na sintaxe do JavaScript. Ele consiste em pares "chave-valor", objetos aninhados e arrays. No desenvolvimento iOS, o JSON é usado para:

\n\n
    \n
  • Obter dados de servidores REST API
  • \n
  • Salvar configurações e preferências do aplicativo
  • \n
  • Trocar dados entre módulos do aplicativo
  • \n
  • Trabalhar com bancos de dados (por exemplo, Firebase ou CoreData + JSON)
  • \n
\n\n

No Swift, existem duas abordagens principais para trabalhar com JSON: a forma antiga através do JSONSerialization (do Foundation) e a moderna, usando os protocolos Codable, Encodable e Decodable. Começaremos com o mais simples JSONSerialization para entender a mecânica e, em seguida, passaremos para o poderoso Codable.

\n\n

Parsing de JSON com JSONSerialization (Foundation)

\n\n

JSONSerialization é uma classe embutida no Foundation que converte dados JSON em objetos Swift (dicionários e arrays). Este método existe desde as primeiras versões do Swift e ainda é usado em projetos legados. Vamos analisar um exemplo.

\n\n

Suponha que temos uma string JSON com informações de um usuário:

\n\n
let jsonString = """\n{\n    "name": "Ivan",\n    "age": 30,\n    "email": "ivan@example.com",\n    "isActive": true,\n    "hobbies": ["leitura", "programação", "esporte"]\n}\n"""
\n\n

Para fazer o parsing deste JSON, primeiro convertemos a string em dados Data e depois usamos JSONSerialization:

\n\n
import Foundation\n\nif let jsonData = jsonString.data(using: .utf8) {\n    do {\n        if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {\n            print("Nome: \\(dictionary["name"] ?? "Sem dados")")\n            print("Idade: \\(dictionary["age"] ?? "Sem dados")")\n            if let hobbies = dictionary["hobbies"] as? [String] {\n                print("Hobbies: \\(hobbies.joined(separator: ", "))")\n            }\n        }\n    } catch {\n        print("Erro ao fazer parsing do JSON: \\(error.localizedDescription)")\n    }\n}
\n\n

Pontos importantes:

\n
    \n
  • Sempre use try-catch — o parsing pode lançar um erro.
  • \n
  • O resultado vem como Any, então é necessário fazer cast para um tipo específico ([String: Any] para objeto, [Any] para array).
  • \n
  • As opções .mutableContainers e .fragmentsAllowed permitem controlar a flexibilidade do parsing.
  • \n
\n\n

Abordagem moderna: protocolo Codable

\n\n

A partir do Swift 4, a Apple apresentou o protocolo Codable (que combina Encodable e Decodable). É uma verdadeira "mágica" — basta declarar uma struct, e o Swift já sabe como fazer parsing e serializar os dados. Vamos reescrever o exemplo anterior usando Codable.

\n\n

1. Declaração do modelo de dados

\n\n
struct User: Codable {\n    let name: String\n    let age: Int\n    let email: String\n    let isActive: Bool\n    let hobbies: [String]\n}
\n\n

Observe: os nomes dos campos na struct devem coincidir com as chaves do JSON (maiúsculas/minúsculas são importantes). Se as chaves forem diferentes (por exemplo, snake_case), use CodingKeys.

\n\n

2. Parsing J

Blogs

Book Recommendations