O que esta ferramenta faz
Uma amostra JSON vira data class Kotlin, uma por objeto.
{ "id": 1, "firstName": "Ada", "address": { "city": "Paris" } }
data class Root(
val id: Long,
val firstName: String,
val address: Address,
)
data class Address(
val city: String,
)
Toda propriedade é um val: uma carga decodificada é um valor. As data class dão equals, hashCode, toString e copy() — esta última é como se muda um campo sem mutar nada.
A chave continua sendo a chave
Os identificadores do Kotlin se escrevem entre crases, e isso basta para guardar uma chave JSON como está:
data class Root(
val `content-type`: String,
val `class`: Long,
val `2fa`: Boolean,
)
class é palavra-chave, content-type tem hífen, 2fa começa por dígito — nada disso importa entre crases. Com o kotlinx.serialization, o nome da propriedade é o nome JSON: isso decodifica como está, sem anotação alguma.
Com Jackson ou Moshi, o nome da propriedade também é o que eles procuram, então os nomes entre crases funcionam ali também. Só se você decidir renomear uma propriedade — contentType em vez de `content-type` — é que precisa de @JsonProperty("content-type") ou @Json(name = "content-type") para voltar a apontar para a chave.
Os tipos, e o ? que não está lá
- Os inteiros viram
Longe os decimaisDouble, o que um número JSON carrega sem discussão. nulle os valores desconhecidos viramAny?— o único lugar onde aparece um ponto de interrogação, porque é o único onde a amostra mostrou um.- Um array vazio ou misto vira
List<Any>.
Nada mais aceita nulo e nada tem valor padrão. Um campo às vezes ausente é um ? e um = null que você acrescenta, depois que uma segunda carga lhe disser o que esta não pôde.
Duas chaves, duas propriedades
Duas chaves que colidiriam como nomes de propriedade ficam separadas em vez de fundidas: a segunda leva um sufixo numerado. Como o nome entre crases é o nome JSON, as colisões aqui são raras: só acontecem quando o conserto é inevitável.
Privado por padrão
Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.