Processamento JSON em Swift: Codable, JSONSerialization e exemplos práticos

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): do básico ao uso avançado



JSON (JavaScript Object Notation) é um dos formatos de troca de dados mais populares no desenvolvimento móvel e desktop. No ecossistema Swift (iOS/macOS), o trabalho com JSON é implementado de forma nativa e elegante, desde o protocolo Codable (Swift 4+) até o JSONSerialization de baixo nível do Foundation. Neste artigo, abordaremos todas as principais abordagens, mostraremos exemplos de código e daremos recomendações práticas para o site educacional pythonlib.ru.



1. Fundamentos: o protocolo Codable



O protocolo Codable é uma combinação de Encodable e Decodable. Ele gera automaticamente o código para converter suas estruturas e classes em JSON e vice-versa. Esta é a forma principal e recomendada de trabalhar com JSON no Swift moderno.



1.1. Modelo de dados simples



import Foundation

struct User: Codable { let id: Int let name: String let email: String let isActive: Bool}

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

// Decodificaçãoif let jsonData = jsonString.data(using: .utf8) { let decoder = JSONDecoder() if let user = try? decoder.decode(User.self, from: jsonData) { print("Usuário: \\(user.name), email: \\(user.email)") }}


1.2. Chaves personalizadas (CodingKeys)



Se as chaves no JSON diferirem das propriedades do modelo (por exemplo, snake_case no JSON, camelCase no Swift), use a enumeração CodingKeys:



struct Product: Codable {    let productId: Int    let productName: String    let price: Double

enum CodingKeys: String, CodingKey { case productId = "product_id" case productName = "product_name" case price }}

let jsonProduct = """{ "product_id": 101, "product_name": "MacBook Pro", "price": 2499.99}"""


2. Trabalhando com arrays e objetos aninhados



O JSON frequentemente contém arrays de objetos ou estruturas aninhadas. O Codable lida com isso sem dificuldade:



struct Author: Codable {    let name: String    let books: [Book]}

struct Book: Codable { let title: String let year: Int}

let jsonLibrary = """{ "name": "J.K. Rowling", "books": [ {"title": "Harry Potter e a Pedra Filosofal", "year": 1997}, {"title": "Harry Potter e a Câmara Secreta", "year": 1998} ]}"""

if let data = jsonLibrary.data(using: .utf8) { let author = try? JSONDecoder().decode(Author.self, from: data) print("Autor: \\(author?.name ?? ""), livros: \\(author?.books.count ?? 0)")}


3. JSONSerialization — abordagem de baixo nível



Embora o Codable seja a forma preferida, às vezes é necessário trabalhar com dados dinâmicos ou não estruturados. Nesses casos, use o JSONSerialization do Foundation:



let jsonString = """{    "status": "success",    "data": {        "temperature": 22.5,        "humidity": 65,        "city": "Moscou"    }}"""

if let data = jsonString.data(using: .utf8) { do { if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { if let status = json["status"] as? String { print("Status: \\(status)") } if let dataDict = json["data"] as? [String: Any], let temp = dataDict["temperature"] as? Double { print("Temperatura: \\(temp)°C") } } } catch { print("Erro ao fazer parsing do JSON: \\(error.localizedDescription)") }}


4. Tratamento de erros e valores opcionais



Dados JSON reais

Recommendations