Cola Elixir à esquerda e clica em "Converter" — transformamos em JSONCola código Elixir

O que esta ferramenta faz

Se tens um struct do Elixir e queres JSON sem arrastar o Jason ou o Poison só para uma conversão rápida, cola aqui e recebes o JSON. Funciona para um literal %Order{}, um map, uma keyword list, uma cadeia aninhada de structs, ou até uma lista de maps com formatos diferentes.

A saída corresponde ao que Jason.encode!/1 te daria depois de um struct ter @derive Jason.Encoder. O campo __struct__ é descartado, chaves atom viram chaves string JSON, e structs aninhados achatam em objetos JSON aninhados. Listas viram arrays JSON, nil vira null, true/false passam direto, inteiros continuam inteiros, floats continuam floats.

Keyword lists ([key: value, other: 1]) são emitidas como objetos JSON — a convenção padrão do Elixir. Binary strings e charlists convertem ambas para strings JSON. DateTime, Date, NaiveDateTime e Time saem como strings ISO-8601 conforme a RFC 3339. Tuplas viram arrays JSON (o mesmo fallback que o Jason usa com um encoder customizado).

Como usar

Três passos. Serve tanto para um map de uma linha como para um módulo de contexto Phoenix cheio de structs.

1

Cola o teu Elixir (ou testa o exemplo)

Solta o teu código no editor à esquerda. Um literal de struct, um map, uma keyword list, um struct aninhado ou um defstruct com uma instância — tudo aceito.

Deixa a sintaxe %ModuleName{}, os pipes e as declarações defstruct como estão. O parser entende.

2

Clica em Converter

Clica no botão verde Converter. A ferramenta percorre o struct, descarta __struct__, expande structs aninhados e emite JSON numa passagem só.

3

Copia o JSON

Pega o JSON indentado no painel direito. Solta num teste de API Phoenix, numa fixture de ExUnit, ou num schema partilhado para um endpoint GraphQL.

Quando isto realmente salva o dia

Fixtures para API Phoenix

Tens um schema de contexto e queres uma fixture JSON para um teste de controller. Cola o struct, guarda o JSON, pronto — sem precisar compilar e codificar no IEx.

Formato de resposta GraphQL

A construir um resolver <a href="https://hexdocs.pm/absinthe/" target="_blank" rel="noopener">Absinthe</a> e queres conferir o formato JSON que um dado struct vai produzir antes de ligar a função do resolver.

Documentar schemas Ecto

Um struct de schema Ecto é praticamente um contrato JSON. Converte para JSON uma vez, faz commit como docs da API, mantém sincronizado quando o schema mudar.

Passagem entre linguagens

O teu serviço Elixir entrega dados a um pipeline de ML em Python. Cola um struct de amostra para veres o JSON que a equipa a jusante vai consumir.

Perguntas frequentes

Corresponde ao Jason.encode!/1?

Esse é o alvo. Structs perdem __struct__, chaves atom viram chaves string, structs aninhados achatam em objetos aninhados. A mesma saída que terias com @derive Jason.Encoder em todo struct da árvore.

Como são tratados os atoms?

Chaves atom num map viram chaves string JSON. Valores atom viram strings JSON contendo o nome do atom (por ex. :active vira "active") — mesmo comportamento do Jason.

E as tuplas?

Tuplas viram arrays JSON ({1, 2, 3}[1, 2, 3]). Estritamente falando, o Jason precisa de um encoder customizado para tuplas; esta ferramenta escolhe o default óbvio para não perderes dados.

Keyword lists vs maps — alguma diferença?

Ambos saem como objetos JSON. Uma keyword list [name: "Ava", id: 1] e um map %{name: "Ava", id: 1} produzem JSON idêntico. Chaves duplicadas numa keyword list mantêm a primeira ocorrência.

Como DateTime e Decimal são tratados?

DateTime/Date/NaiveDateTime/Time saem como strings ISO-8601. Valores Decimal são emitidos como números JSON (ou strings se preferires a segurança de string numérica — depende do caso). Igual ao que obterias com Jason e os encoders derivados corretos.

O meu código é armazenado?

O teu código é enviado ao backend para a conversão e não fica persistido — não logamos o payload. Troca dados reais de utilizadores ou segredos antes de colar.

Outras ferramentas que podes precisar

Elixir to JSON combina bem com o resto da caixa de ferramentas: