Convertisseur Elixir vers JSON
Colle un struct ou un map Elixir. Récupère du JSON.
Ce que fait cet outil
Si tu as un struct Elixir et que tu veux du JSON sans embarquer Jason ou Poison juste pour une conversion rapide, colle-le ici et récupère le JSON. Ça marche pour un littéral %Order{}, un map, une keyword list, une chaîne de structs imbriqués, ou même une liste de maps aux formes différentes.
La sortie correspond à ce que Jason.encode!/1 te rendrait une fois qu'un struct a un @derive Jason.Encoder. Le champ __struct__ saute, les clés atom deviennent des clés string JSON, et les structs imbriqués s'aplatissent en objets JSON imbriqués. Les listes deviennent des arrays JSON, nil devient null, true/false passent tels quels, les entiers restent entiers, les floats restent floats.
Les keyword lists ([key: value, other: 1]) sortent comme des objets JSON — la convention habituelle en Elixir. Les binary strings et les charlists se convertissent tous deux en strings JSON. DateTime, Date, NaiveDateTime et Time sortent en ISO-8601 conformément à la RFC 3339. Les tuples deviennent des arrays JSON (le même fallback que Jason avec un encoder custom).
Comment l'utiliser
Trois étapes. Ça marche aussi bien pour un map sur une ligne que pour un module de contexte Phoenix bourré de structs.
Colle ton Elixir (ou essaie l'exemple)
Balance ton code dans l'éditeur de gauche. Un littéral de struct, un map, une keyword list, un struct imbriqué ou un defstruct avec une instance — tout passe.
Laisse la syntaxe %ModuleName{}, les pipes et les déclarations defstruct tels quels. Le parser les comprend.
Clique sur Convertir
Clique sur le bouton vert Convertir. L'outil parcourt le struct, vire __struct__, développe les structs imbriqués et sort du JSON en une passe.
Récupère le JSON
Prends le JSON indenté dans le panneau de droite. Balance-le dans un test d'API Phoenix, une fixture ExUnit ou un schéma partagé pour un endpoint GraphQL.
Quand ça rend vraiment service
Fixtures d'API Phoenix
Tu as un schema de contexte et tu veux une fixture JSON pour un test de contrôleur. Colle le struct, sauvegarde le JSON, terminé — pas besoin de compiler et d'encoder dans IEx.
Forme d'une réponse GraphQL
Tu construis un resolver <a href="https://hexdocs.pm/absinthe/" target="_blank" rel="noopener">Absinthe</a> et tu veux vérifier la forme JSON qu'un struct donné va produire avant de câbler la fonction resolver.
Documenter des schémas Ecto
Un struct de schéma Ecto, c'est grosso modo un contrat JSON. Convertis-le une fois, commit-le comme doc d'API, et garde-le à jour quand le schéma change.
Passerelle entre langages
Ton service Elixir refile des données à un pipeline ML Python. Colle un struct d'exemple pour voir le JSON que l'équipe en aval va consommer.
Questions fréquentes
Est-ce que ça correspond à Jason.encode!/1 ?
C'est la cible. Les structs perdent __struct__, les clés atom deviennent des clés string, les structs imbriqués s'aplatissent en objets imbriqués. La même sortie que tu aurais avec @derive Jason.Encoder sur chaque struct de l'arbre.
Comment les atoms sont-ils gérés ?
Les clés atom d'un map deviennent des clés string JSON. Les valeurs atom deviennent des strings JSON contenant le nom de l'atom (par exemple :active devient "active") — même comportement que Jason.
Et pour les tuples ?
Les tuples deviennent des arrays JSON ({1, 2, 3} → [1, 2, 3]). À strictement parler, Jason a besoin d'un encoder custom pour les tuples ; l'outil choisit le default de bon sens pour ne pas perdre de données en route.
Keyword lists vs maps — une différence ?
Les deux sortent en objets JSON. Une keyword list [name: "Ava", id: 1] et un map %{name: "Ava", id: 1} produisent le même JSON. Les clés en double dans une keyword list gardent la première occurrence.
Comment sont gérés DateTime et Decimal ?
DateTime/Date/NaiveDateTime/Time sortent en strings ISO-8601. Les valeurs Decimal sortent en nombres JSON (ou en strings si tu préfères la sécurité du string numérique — ça dépend du contexte). Pareil que ce que te donnerait Jason avec les bons encoders dérivés.
Mon code est-il stocké ?
Ton code est envoyé au backend pour la conversion et n'est pas persisté — on ne logue pas le payload. Remplace toutes les données utilisateur réelles ou les secrets avant de coller.
Autres outils qui peuvent servir
Elixir to JSON s'associe bien avec le reste de la boîte à outils :