Klistra in Elixir till vänster och klicka på "Konvertera" — vi gör JSON av detKlistra in Elixir-kod

Vad verktyget gör

Har du en Elixir-struct och vill ha JSON utan att dra in Jason eller Poison bara för en snabb konvertering — klistra in den här så får du JSON:en. Funkar för en enskild %Order{}-literal, en map, en keyword list, en nästlad kedja av structs, eller till och med en lista av maps med olika form.

Utdatan matchar det Jason.encode!/1 skulle ge dig när en struct har @derive Jason.Encoder. Fältet __struct__ plockas bort, atom-nycklar blir JSON-stringnycklar, och nästlade structs plattas ut till nästlade JSON-objekt. Listor blir JSON-arrayer, nil blir null, true/false går rakt över, heltal förblir heltal, floats förblir floats.

Keyword lists ([key: value, other: 1]) skickas ut som JSON-objekt — standardkonventionen i Elixir. Binary strings och charlists konverteras båda till JSON-strings. DateTime, Date, NaiveDateTime och Time skickas ut som ISO-8601-strängar enligt RFC 3339. Tupler blir JSON-arrayer (samma fallback som Jason använder med en custom encoder).

Så här använder du det

Tre steg. Funkar lika bra för en enradig map som för en Phoenix context-modul full av structs.

1

Klistra in din Elixir (eller testa exemplet)

Släpp koden i editorn till vänster. En struct-literal, en map, en keyword list, en nästlad struct eller en defstruct med en instans — allt går bra.

Lämna %ModuleName{}-syntaxen, pipes och defstruct-deklarationer som de är. Parsern förstår dem.

2

Tryck på Konvertera

Klicka på den gröna Konvertera-knappen. Verktyget går igenom structen, tar bort __struct__, expanderar nästlade structs och skickar ut JSON i ett svep.

3

Kopiera JSON:en

Ta den indenterade JSON:en från högerpanelen. Släpp in den i ett Phoenix API-test, en ExUnit-fixture eller ett delat schema för en GraphQL-endpoint.

När det faktiskt kommer till nytta

Phoenix API-fixtures

Du har ett context-schema och vill ha en JSON-fixture till ett controller-test. Klistra in structen, spara JSON:en, klart — ingen anledning att kompilera och encoda i IEx.

Form på GraphQL-svar

Du bygger en <a href="https://hexdocs.pm/absinthe/" target="_blank" rel="noopener">Absinthe</a>-resolver och vill dubbelkolla vilken JSON-form en viss struct ger innan du kopplar in resolver-funktionen.

Dokumentera Ecto-scheman

En Ecto schema-struct är i praktiken ett JSON-kontrakt. Konvertera till JSON en gång, checka in som API-docs, håll i synk när schemat ändras.

Överlämning mellan språk

Din Elixir-tjänst skickar data vidare till en Python ML-pipeline. Klistra in en exempel-struct för att se vilken JSON teamet nedströms kommer att få.

Vanliga frågor

Matchar det Jason.encode!/1?

Det är målet. Structs tappar __struct__, atom-nycklar blir stringnycklar, nästlade structs plattas ut till nästlade objekt. Samma utdata som du skulle få med @derive Jason.Encoder på varje struct i trädet.

Hur hanteras atoms?

Atom-nycklar i en map blir JSON-stringnycklar. Atom-värden blir JSON-strings som innehåller atom-namnet (t.ex. :active blir "active") — samma beteende som Jason.

Och tupler?

Tupler blir JSON-arrayer ({1, 2, 3}[1, 2, 3]). Strikt sett kräver Jason en custom encoder för tupler; verktyget väljer den vettiga defaulten så att inget data försvinner.

Keyword lists vs maps — någon skillnad?

Båda skickas ut som JSON-objekt. En keyword list [name: "Ava", id: 1] och en map %{name: "Ava", id: 1} ger identisk JSON. Dubblettnycklar i en keyword list behåller första förekomsten.

Hur hanteras DateTime och Decimal?

DateTime/Date/NaiveDateTime/Time blir ISO-8601-strängar. Decimal-värden skickas ut som JSON-tal (eller som strings om du hellre har numeric-string-säkerhet — beror på fallet). Samma som du skulle få från Jason med rätt derived encoders.

Sparas min kod?

Din kod skickas till backend för konverteringen och sparas inte — vi loggar inte payloaden. Byt ut riktig användardata eller hemligheter innan du klistrar in.

Andra verktyg som kan vara bra att ha

Elixir to JSON går bra ihop med resten av verktygslådan: