Introdução ao Trabalho com JSON em Kotlin
JSON (JavaScript Object Notation) é um dos formatos mais populares para troca de dados entre um servidor e um cliente. No desenvolvimento moderno com Kotlin, seja em aplicações Android ou projetos server-side, a capacidade de trabalhar eficientemente com JSON é uma habilidade essencial. Neste artigo, examinaremos detalhadamente como realizar parsing e serialização de JSON em Kotlin usando as bibliotecas mais populares: kotlinx.serialization e Gson.
Seja criando uma API REST, processando respostas de serviços externos ou salvando configurações locais, entender os princípios de trabalhar com JSON ajudará você a escrever código mais limpo e eficiente.
Fundamentos do Parsing de JSON em Kotlin
O que são Serialização e Desserialização?
Antes de ir para o código, é importante entender dois conceitos-chave:
- Serialização — converter um objeto Kotlin (data class, lista, etc.) em uma string JSON.
- Desserialização (Parsing) — o processo inverso: criar um objeto Kotlin a partir de uma string JSON.
Kotlin não possui suporte nativo a JSON, portanto usamos bibliotecas de terceiros. Vamos analisar as duas mais populares.
A Biblioteca kotlinx.serialization
kotlinx.serialization é uma biblioteca oficial da JetBrains que se integra perfeitamente com a linguagem Kotlin. Ela funciona em tempo de compilação, garantindo alto desempenho e segurança de tipos.
Adicionando a Biblioteca
Primeiro, adicione o plugin ao build.gradle.kts:
plugins { kotlin("plugin.serialization") version "1.9.22"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2")}Definindo o Modelo de Dados
Vamos criar uma classe para representar um usuário:
import kotlinx.serialization.Serializable
@Serializabledata class User( val name: String, val age: Int, val email: String? = null, // campo anulável val roles: List<String> = emptyList())A anotação @Serializable informa ao compilador que esta classe pode ser serializada.
Serialização (Objeto → JSON)
import kotlinx.serialization.encodeToStringimport kotlinx.serialization.json.Json
fun main() { val user = User( name = "Anna", age = 28, email = "anna@example.com", roles = listOf("admin", "user") )
val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Anna","age":28,"email":"anna@example.com","roles":["admin","user"]}}Desserialização (JSON → Objeto)
import kotlinx.serialization.decodeFromString
fun main() { val json = """{"name":"Ivan","age":35,"roles":["user"]}""" val user = Json.decodeFromString<User>(json) println(user.name) // Ivan println(user.email) // null (não especificado no JSON)}Configurando as Opções do Json
Você pode personalizar o comportamento do parser:
val json = Json { prettyPrint = true // formatação bonita ignoreUnknownKeys = true // ignorar campos extras no JSON isLenient = true // permitir parsing flexível (ex.: aspas)}
val user = json.decodeFromString<User>(jsonString)A Biblioteca Gson
Gson do Google é outra biblioteca popular, especialmente comum no desenvolvimento Android.
Adicionando Gson
dependencies { implementation("com.google.code.gson:gson:2.10.1")}Exemplo de Uso
import com.google.gson.Gson
data class Product( val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val product = Product(1, "Laptop", 999.99) // Serialização val json = gson.toJson(product) println(json) // {"id":1,"title":"Laptop","price":999.99} // Desserialização val jsonString = """{"id":2,"title":"Mouse","price":25.50}""" val parsedProduct = gson.fromJson(jsonString, Product::class.java) println(parsedProduct.title) // Mouse}