Trabalhando com JSON em Kotlin: Análise e Serialização para Iniciantes
JSON (JavaScript Object Notation) é o formato de troca de dados mais popular em aplicações web modernas e APIs. Se você começou a aprender Kotlin, mais cedo ou mais tarde encontrará a necessidade de converter strings JSON em objetos da sua aplicação (desserialização ou análise) e vice-versa (serialização).
Neste artigo, abordaremos as principais formas de trabalhar com JSON em Kotlin usando três bibliotecas populares: kotlinx.serialization, Gson e Moshi. Você aprenderá como começar rapidamente a analisar JSON e serializar dados sem complexidades desnecessárias.
O que são Análise e Serialização de JSON?
Antes de ir para o código, vamos definir os termos:
- Serialização é o processo de converter um objeto (ex.: uma data class do Kotlin) em uma string no formato JSON.
- Análise (desserialização) é o processo inverso: a partir de uma string JSON obtemos um objeto de um tipo específico.
A interação com JSON em Kotlin pode ser organizada de várias maneiras. Não há suporte nativo a JSON na linguagem, então usamos bibliotecas de terceiros.
Biblioteca kotlinx.serialization (Abordagem Recomendada)
kotlinx.serialization é a biblioteca oficial da JetBrains que se integra perfeitamente com a linguagem Kotlin. Ela suporta multiplataforma (JVM, JS, Native) e funciona em tempo de compilação, tornando-a muito rápida e segura.
Instalação
Adicione o plugin ao arquivo build.gradle.kts:
plugins { kotlin("plugin.serialization") version "1.9.0"}
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")}Exemplo: Análise de JSON
Suponha que temos um JSON com dados de usuário:
{ "name": "Ivan", "age": 28, "email": "ivan@example.com"}Vamos criar uma data class e anotá-la com @Serializable:
import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json
@Serializabledata class User( val name: String, val age: Int, val email: String)
fun main() { val jsonString = """ {"name": "Ivan", "age": 28, "email": "ivan@example.com"} """.trimIndent()
val user = Json.decodeFromString<User>(jsonString) println(user) // User(name=Ivan, age=28, email=ivan@example.com)}Exemplo: Serialização para JSON
fun main() { val user = User(name = "Anna", age = 25, email = "anna@example.com") val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Anna","age":25,"email":"anna@example.com"}}Vantagens: segurança de tipos, velocidade, sem reflexão, suporte a campos anuláveis, valores padrão e objetos aninhados.
Biblioteca Gson (do Google)
Gson é uma das bibliotecas mais antigas e populares para trabalhar com JSON no ecossistema JVM. É simples de usar, mas utiliza reflexão, o que é um pouco mais lento que o kotlinx.serialization.
Instalação
dependencies { implementation("com.google.code.gson:gson:2.10.1")}Exemplo: Análise de JSON
import com.google.gson.Gson
data class Product( val id: Int, val title: String, val price: Double)
fun main() { val gson = Gson() val jsonString = """{"id": 101, "title": "Laptop", "price": 75000.0}"""
val product = gson.fromJson(jsonString, Product::class.java) println(product) // Product(id=101, title=Laptop, price=75000.0)}Exemplo: Serialização para JSON
fun main() { val product = Product(id = 202, title = "Mouse", price = 2