Converter JSON em case classes Scala — Numio
Transforma uma amostra JSON em case classes Scala. Objetos aninhados viram case classes separadas e arrays viram Seq[...]; valores null e chaves ausentes em alguns itens de um array viram Option[...].
Rascunhar os modelos de uma API JSON antes de adicionar um codec Circe, Play JSON ou uPickle.
JSON
Scala Case Class
Quando usar
- Rascunhar os modelos de uma API JSON antes de adicionar um codec Circe, Play JSON ou uPickle.
- Transformar um payload de exemplo de Kafka ou HTTP em case classes para um job Spark ou Akka.
Como usar
- Cole um objeto JSON; para campos opcionais, inclua vários itens de array com chaves diferentes.
- Confira a saída: a classe raiz é RootInterface e as classes aninhadas recebem o nome da chave em PascalCase (speakers vira Speakers).
- Copie as classes, renomeie-as e restrinja qualquer Option[Any] ou Seq[Any] que a amostra não conseguiu tipar.
Entrada JSON
{
"id": 7,
"type": "conference",
"price": 49.9,
"venue": null,
"tags": ["jvm", "fp"],
"speakers": [
{ "name": "Martin", "talk": "Keynote" },
{ "name": "Li", "talk": "Effects", "slides": "https://example.com/s.pdf" }
]
}Case classes Scala
case class RootInterface( id: Int, `type`: String, price: Double, venue: Option[Any], tags: Seq[String], speakers: Seq[Speakers] ) case class Speakers( name: String, talk: String, slides: Option[String] )
Detalhes e limitações
Roda no navegador com o gerador próprio do site; não há chamada ao servidor. A página não tem configurações e não adiciona imports nem derivações de codec.
Todos os itens de um array são mesclados: uma chave ausente em alguns itens, ou null em alguns, vira Option[...], e 12 ao lado de 1.5 vira Double.
Um valor que é sempre null gera Option[Any] e um array vazio Seq[Any], porque a amostra não indica nenhum tipo.
Palavras reservadas e chaves que não são identificadores ficam entre crases, como `type`; chaves em snake_case são mantidas como estão.
FAQ
Ele gera Option para campos anuláveis?
Sim. Uma chave cujo valor é null vira Option[...], tipada a partir das outras amostras quando a chave também tem valores reais; caso contrário, Option[Any]. Chaves ausentes em alguns itens de um array também viram Option.
O que acontece com um array JSON na raiz?
Os itens são mesclados em uma única case class RootInterface, com as chaves ausentes em alguns itens como Option, e type RootInterfaceList = Seq[RootInterface] é adicionado.
Um ID de 64 bits é tipado como Long?
Só quando algum valor da amostra está fora do intervalo de Int (cerca de ±2,1 bilhões). Os demais inteiros viram Int, então mude para Long os IDs ou timestamps que podem crescer.