Konwerter Elixir do JSON
Wklej struct albo mapę z Elixira. Wyjdzie JSON.
Co robi to narzędzie
Jeżeli masz struct Elixira i chcesz JSON, a nie chce ci się wrzucać do projektu Jasona ani Poisona tylko po to, żeby coś raz przekonwertować — wklej to tutaj i masz JSON. Ogarnia pojedynczy literal %Order{}, mapę, keyword listę, zagnieżdżony łańcuch structów, a nawet listę map o różnych kształtach.
Wyjście odpowiada temu, co dałoby Jason.encode!/1, gdy struct ma @derive Jason.Encoder. Pole __struct__ leci, klucze atomowe stają się kluczami stringowymi w JSON-ie, a zagnieżdżone structy spłaszczają się do zagnieżdżonych obiektów JSON. Listy stają się tablicami JSON, nil staje się null, true/false przechodzą tak jak są, inty zostają intami, floaty zostają floatami.
Keyword listy ([key: value, other: 1]) wychodzą jako obiekty JSON — standardowa konwencja w Elixirze. Binary stringi i charlisty jedne i drugie lądują jako stringi JSON. DateTime, Date, NaiveDateTime i Time są emitowane jako stringi ISO-8601 zgodnie z RFC 3339. Krotki stają się tablicami JSON (ten sam fallback, co Jason z customowym encoderem).
Jak tego używać
Trzy kroki. Działa zarówno dla jednolinijkowej mapy, jak i dla modułu kontekstu Phoenixa pełnego structów.
Wklej swojego Elixira (albo spróbuj przykładu)
Wrzuć kod do edytora po lewej. Literal structa, mapa, keyword lista, zagnieżdżony struct albo defstruct z instancją — wszystko gra.
Składnię %ModuleName{}, pipe’y i deklaracje defstruct zostaw tak, jak są. Parser to rozumie.
Kliknij Konwertuj
Kliknij zielony przycisk Konwertuj. Narzędzie przechodzi przez struct, wyrzuca __struct__, rozwija zagnieżdżone structy i produkuje JSON za jednym zamachem.
Skopiuj JSON
Weź wcięty JSON z prawego panelu. Wrzuć go w test API Phoenixa, fixture ExUnit albo wspólny schema dla endpointu GraphQL.
Kiedy to naprawdę ratuje sytuację
Fixtury dla Phoenix API
Masz schema kontekstowy i chcesz fixture JSON pod test kontrolera. Wklejasz struct, zapisujesz JSON, gotowe — bez kompilowania i enkodowania w IEx.
Kształt odpowiedzi GraphQL
Piszesz resolver <a href="https://hexdocs.pm/absinthe/" target="_blank" rel="noopener">Absinthe</a> i chcesz zweryfikować, jaki kształt JSON-a wypluje dany struct, zanim podłączysz funkcję resolvera.
Dokumentowanie schema Ecto
Struct schema Ecto to w zasadzie kontrakt JSON. Konwertujesz raz, commitujesz jako dokumentację API, aktualizujesz gdy schema się zmienia.
Przekazywanie danych między językami
Twój serwis w Elixirze podaje dane do pipeline’u ML w Pythonie. Wklejasz przykładowy struct, żeby zobaczyć, jaki JSON dostanie zespół po drugiej stronie.
Częste pytania
Czy pokrywa się z Jason.encode!/1?
Dokładnie o to chodzi. Structy tracą __struct__, klucze atomowe zmieniają się w klucze stringowe, zagnieżdżone structy spłaszczają się w zagnieżdżone obiekty. Dokładnie to, co dostałbyś z @derive Jason.Encoder na każdym struct’cie w drzewie.
Jak obsługiwane są atomy?
Atomowe klucze mapy stają się stringowymi kluczami JSON. Atomowe wartości stają się stringami JSON zawierającymi nazwę atomu (np. :active zamienia się w "active") — dokładnie tak samo jak Jason.
A krotki?
Krotki stają się tablicami JSON ({1, 2, 3} → [1, 2, 3]). Formalnie Jason wymaga customowego encodera dla krotek; to narzędzie wybiera rozsądny default, żebyś nie tracił danych.
Keyword listy vs mapy — jakaś różnica?
Obydwa wychodzą jako obiekty JSON. Keyword lista [name: "Ava", id: 1] i mapa %{name: "Ava", id: 1} dają identyczny JSON. Gdy w keyword liście powtarzają się klucze, zostaje pierwsze wystąpienie.
Jak obsługiwane są DateTime i Decimal?
DateTime/Date/NaiveDateTime/Time lądują jako stringi ISO-8601. Wartości Decimal emitowane są jako liczby JSON (albo jako stringi, jeśli wolisz bezpieczeństwo liczby w stringu — zależy od kształtu). Tak samo, jak dostałbyś z Jasona z odpowiednio wyderived encoderami.
Czy mój kod jest zapisywany?
Twój kod jest wysyłany na backend do konwersji i nie jest persystowany — nie logujemy payloadu. Zanim wkleisz, podmień prawdziwe dane użytkowników czy sekrety na coś neutralnego.
Inne narzędzia, które mogą się przydać
Elixir to JSON gra dobrze z resztą skrzynki z narzędziami: