Introdução: por que JSON é a base do desenvolvedor Kotlin moderno
JSON (JavaScript Object Notation) continua sendo o padrão de facto para troca de dados entre servidor e cliente, seja um aplicativo móvel Android ou um backend em Ktor. No ecossistema Kotlin, trabalhar com JSON é especialmente conveniente devido à tipagem forte da linguagem e às poderosas bibliotecas de serialização. Neste artigo, abordaremos duas abordagens principais: o uso da biblioteca oficial kotlinx.serialization e a popular Gson. Você aprenderá como fazer parsing de estruturas complexas, serializar objetos e lidar com exceções na prática.
Preparação do projeto e adição de dependências
Antes de escrever código, é necessário adicionar as bibliotecas ao arquivo build.gradle.kts (para Gradle). Vamos considerar ambas as opções.
Opção 1: kotlinx.serialization (recomendada)
- Adicione o plugin em
plugins:kotlin("plugin.serialization") version "1.9.22" - Em
dependencies, especifique:implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")
Opção 2: Gson (para compatibilidade com projetos Java)
- Em
dependencies, adicione:implementation("com.google.code.gson:gson:2.10.1")
// build.gradle.kts — exemplo completo para kotlinx.serializationplugins { kotlin("jvm") version "1.9.22" kotlin("plugin.serialization") version "1.9.22"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Parsing de JSON em Kotlin: do simples ao complexo
Parsing (desserialização) é a conversão de uma string JSON em um objeto Kotlin. Vamos considerar com base em dados de um usuário.
Exemplo de dados
{ "id": 123, "name": "Ana", "email": "ana@exemplo.com", "active": true}Criação da Data Class
Para ambas as bibliotecas, usa-se a mesma classe. Importante: para kotlinx.serialization, é necessário adicionar a anotação @Serializable.
import kotlinx.serialization.Serializable
@Serializabledata class User( val id: Int, val name: String, val email: String, val active: Boolean)Parsing com kotlinx.serialization
import kotlinx.serialization.json.Json
fun parseWithKotlinx(jsonString: String): User { val json = Json { ignoreUnknownKeys = true } // ignoramos campos desconhecidos return json.decodeFromString<User>(jsonString)}
// Uso:fun main() { val json = """{"id":123,"name":"Ana","email":"ana@exemplo.com","active":true}""" val user = parseWithKotlinx(json) println(user.name) // Ana}Parsing com Gson
import com.google.gson.Gson
fun parseWithGson(jsonString: String): User { val gson = Gson() return gson.fromJson(jsonString, User::class.java)}
// Uso:fun main() { val json = """{"id":123,"name":"Ana","email":"ana@exemplo.com","active":true}""" val user = parseWithGson(json) println(user.email) // ana@exemplo.com}Serialização: transformando objeto em JSON
O processo inverso — criar uma string JSON a partir de um objeto — é igualmente importante para enviar dados ao servidor.
Serialização com kotlinx.serialization
import kotlinx.serialization.encodeToString
fun serializeWithKotlinx(user: User): String { val json = Json { prettyPrint = true } return json.encodeToString(user)}
// Resultado:// {// "id": 123,// "name": "Ana",// "email": "ana@exemplo.com",// "active": true// }Serialização com Gson
fun serializeWithGson(user: User): String { val gson = GsonBuilder().setPrettyPrinting().create() return gson.toJson(user)}<