Wklej Elixira po lewej i kliknij "Konwertuj" — zamienimy to na JSONWklej kod Elixira

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.

1

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.

2

Kliknij Konwertuj

Kliknij zielony przycisk Konwertuj. Narzędzie przechodzi przez struct, wyrzuca __struct__, rozwija zagnieżdżone structy i produkuje JSON za jednym zamachem.

3

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: