Indsæt Elixir til venstre og klik på "Konverter" — vi laver JSON ud af detIndsæt Elixir-kode

Hvad værktøjet gør

Har du en Elixir-struct og vil have JSON uden at hive Jason eller Poison ind bare for en hurtig konvertering — så smæk den ind her og få JSON’en tilbage. Virker for en enkelt %Order{}-literal, en map, en keyword list, en indlejret kæde af structs, eller endda en liste af maps med forskellige former.

Outputtet matcher det, Jason.encode!/1 ville give dig, når en struct har @derive Jason.Encoder. Feltet __struct__ ryger, atom-nøgler bliver til JSON-string-nøgler, og indlejrede structs fladt ud til indlejrede JSON-objekter. Lister bliver JSON-arrays, nil bliver null, true/false går lige over, heltal forbliver heltal, floats forbliver floats.

Keyword lists ([key: value, other: 1]) bliver udsendt som JSON-objekter — den almindelige konvention i Elixir. Binary strings og charlists konverteres begge til JSON-strings. DateTime, Date, NaiveDateTime og Time udsendes som ISO-8601-strenge i henhold til RFC 3339. Tupler bliver JSON-arrays (samme fallback som Jason bruger med en custom encoder).

Sådan bruger du det

Tre trin. Virker for en enkelt-linjes map lige så godt som for et Phoenix-context-modul propfuldt af structs.

1

Indsæt din Elixir (eller prøv eksemplet)

Smid din kode i editoren til venstre. En struct-literal, en map, en keyword list, en indlejret struct eller en defstruct med en instans — alt sammen fint.

Lad %ModuleName{}-syntaks, pipes og defstruct-deklarationer stå som de er. Parseren forstår dem.

2

Tryk på Konverter

Klik på den grønne Konverter-knap. Værktøjet løber structen igennem, smider __struct__ væk, folder indlejrede structs ud og spytter JSON ud i ét hug.

3

Kopier JSON’en

Tag den indrykkede JSON fra højre panel. Smid den i en Phoenix API-test, en ExUnit-fixture, eller et delt schema til et GraphQL-endpoint.

Hvornår det virkelig gør en forskel

Fixtures til Phoenix-API

Du har et context-schema og vil have en JSON-fixture til en controller-test. Indsæt structen, gem JSON’en, færdig — ingen grund til at kompilere og encode i IEx.

Form på GraphQL-respons

Du bygger en <a href="https://hexdocs.pm/absinthe/" target="_blank" rel="noopener">Absinthe</a>-resolver og vil lige tjekke, hvilken JSON-form en given struct producerer, inden du kobler resolver-funktionen på.

Dokumentér Ecto-skemaer

En Ecto schema-struct er stort set en JSON-kontrakt. Konvertér til JSON én gang, commit som API-docs, hold i sync når schemaet ændrer sig.

Overlevering mellem sprog

Din Elixir-service sender data videre til en Python ML-pipeline. Indsæt en eksempel-struct for at se den JSON, holdet længere nede vil forbruge.

Almindelige spørgsmål

Matcher det Jason.encode!/1?

Det er målet. Structs mister __struct__, atom-nøgler bliver string-nøgler, indlejrede structs fladt ud til indlejrede objekter. Samme output som du ville få med @derive Jason.Encoder på hver struct i træet.

Hvordan håndteres atoms?

Atom-nøgler i en map bliver JSON-string-nøgler. Atom-værdier bliver JSON-strings med atom-navnet i (fx :active bliver "active") — samme opførsel som Jason.

Hvad med tupler?

Tupler bliver JSON-arrays ({1, 2, 3}[1, 2, 3]). Strengt taget kræver Jason en custom encoder til tupler; værktøjet vælger den fornuftige default, så der ikke ryger data på gulvet.

Keyword lists vs maps — er der forskel?

Begge udsendes som JSON-objekter. En keyword list [name: "Ava", id: 1] og en map %{name: "Ava", id: 1} giver identisk JSON. Dubletter af nøgler i en keyword list beholder den første forekomst.

Hvordan håndteres DateTime og Decimal?

DateTime/Date/NaiveDateTime/Time bliver ISO-8601-strenge. Decimal-værdier udsendes som JSON-tal (eller strings, hvis du foretrækker sikkerheden ved numeric-string — afhænger af formen). Samme som du ville få fra Jason med de rigtige derived encoders.

Bliver min kode gemt?

Din kode sendes til backenden til konverteringen og bliver ikke gemt — vi logger ikke payloadet. Skift rigtige brugerdata eller hemmeligheder ud, før du indsætter.

Andre værktøjer du måske har brug for

Elixir to JSON spiller godt sammen med resten af værktøjskassen: