Introdução: por que JSON em Kotlin é dor e alegria ao mesmo tempo
\nSe você já escreveu para Android ou backend em Kotlin, certamente já encontrou JSON. É como o ar para o desenvolvedor moderno: APIs, configurações, bancos de dados — tudo fala essa língua. Mas eis o paradoxo: a pergunta "How to parse JSON in Kotlin?" no Stack Overflow recebe milhares de visualizações todo mês. Por quê? Porque em Kotlin, ao contrário de Java, existe null safety, e bibliotecas antigas como Gson começam a "dar problemas".
\nNeste tutorial, abordaremos parsing de JSON em Kotlin do simples ao complexo. Você aprenderá a trabalhar com Kotlinx Serialization, Moshi e o clássico Gson. Escreveremos código real que pode ser copiado diretamente para o seu projeto. Vamos lá!
\n\n\n\n
O que é JSON e por que Kotlin não se dá bem com ele de imediato?
\nJSON (JavaScript Object Notation) é um formato textual para troca de dados. Ele se parece com isto:
\n{\n "name": "Kotlin",\n "year": 2011,\n "features": ["null safety", "coroutines"]\n}\nÀ primeira vista, o que poderia dar errado? Mas em Kotlin, há tipagem forte e null safety. Ao fazer parsing de JSON, você deve indicar explicitamente quais campos podem ser null e quais são obrigatórios. Se a biblioteca não levar isso em conta, você terá NullPointerException ou bugs estranhos.
É por isso que escolher a biblioteca certa para parsing de JSON em Kotlin não é apenas "uma questão de gosto", mas sim de estabilidade do projeto.
\n\nTop 3 bibliotecas para parsing de JSON em Kotlin
\nAbordaremos três abordagens principais. Cada uma tem seus prós e contras.
\n- \n
- Kotlinx Serialization — biblioteca oficial da JetBrains. Melhor integração com a linguagem. \n
- Moshi — biblioteca moderna da Square. Funciona tanto com Java quanto com Kotlin. \n
- Gson — o bom e velho padrão. Ainda popular, mas requer cuidado com Kotlin. \n
1. Kotlinx Serialization — a escolha dos profissionais
\nEsta é a biblioteca nativa para Kotlin. Ela usa geração de código e suporta totalmente null safety. Se você está escrevendo um novo projeto em Kotlin, esta é a sua escolha.
\nInstalação: Adicione o plugin no build.gradle.kts:
plugins {\n kotlin("plugin.serialization") version "1.9.0"\n}\n\ndependencies {\n implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")\n}\nExemplo de código:
\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n val name: String,\n val year: Int,\n val features: List<String>\n)\n\nfun main() {\n val jsonString = """\n {\n "name": "Kotlin",\n "year": 2011,\n "features": ["null safety", "coroutines"]\n }\n """.trimIndent()\n\n val user = Json.decodeFromString<User>(jsonString)\n println(user.name) // Kotlin\n println(user.features[0]) // null safety\n}\nObserve: Kotlinx Serialization captura automaticamente os tipos. Se um campo estiver ausente no JSON e não estiver marcado como nullable no data class, você receberá uma exceção. Isso é bom — você não deixará passar um erro.
2. Moshi — flexível e rápido
\nMoshi é uma biblioteca da Square, criada pensando em Kotlin. Ela também suporta geração de código e null safety. Ao contrário do Gson, o Moshi não usa reflexão por padrão, o que o torna mais rápido.
\nInstalação:
\ndependencies {\n implementation("com.squareup.moshi:moshi-kotlin:1.15.0")\n ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")\n}\nExemplo de código:
\nim