Plak F# links en klik op "Converteren" — wij maken er JSON vanPlak F#-code

Wat deze tool doet

Als je een F#-record of een discriminated union hebt en een JSON-payload nodig hebt voor een test, een HTTP-call of een .NET-integratie, dan is de body met de hand schrijven een gedoe. Plak je F# hier en je krijgt geldig JSON terug. Eén record, een union met een paar cases, of een hele module — zelfde flow.

De converter volgt het gedrag van de JSON-libraries die de meeste F#-code gebruikt. System.Text.Json met de F#-converter, Newtonsoft.Json en Thoth.Json zetten allemaal record-velden om in JSON-keys — precies wat hier gebeurt. int, float, decimal en bigint worden JSON-numbers. bool blijft een boolean. DateTime en DateTimeOffset komen eruit als ISO-8601-strings. string option geeft de waarde bij Some x of null bij None.

Discriminated unions worden geserialiseerd met een discriminator zodat de JSON netjes round-tript. Een type Status = | Paid | Refunded of Guid komt eruit als {"Case":"Refunded","Fields":["..."]}, of in een aangepaste tagged vorm als JsonUnionCase-attributen aanwezig zijn — precies wat de serializers van het dotnet/fsharp-team produceren. Lists, arrays en sequences worden JSON-arrays. Map<string, 'T> wordt een JSON-object. Tuples worden JSON-arrays. Als je dieper in idiomatische F#-modellering wilt duiken, is fsharpforfunandprofit.com een bookmark waard.

Zo gebruik je het

Drie stappen. Werkt hetzelfde of je nu één record plakt of een hele Domain.fs.

1

Plak je F# (of probeer het voorbeeld)

Drop je F# zoals hij is in de linker editor. Een record, een discriminated union, een record-instantie met { ... }-syntax, of meerdere types — allemaal prima. Klik op Voorbeeld laden voor een realistisch geval.

Laat module-, namespace-, open- en attribuutdeclaraties gewoon staan — de parser negeert wat hij niet nodig heeft. De officiële F# language reference is een goede backup.

2

Klik op Converteren

Klik op de groene Converteren-knop. De tool leest het F#, loopt door elk record-veld en elke union case, en produceert de JSON in één pass. Tijdens het draaien zie je kort een loading indicator.

3

Kopieer de JSON

Het rechterpaneel vult zich met ingesprongen JSON. Plak het in een Giraffe- of Saturn-request, een xUnit-fixture, een Fable-test, of je API-documentatie.

Wanneer dit echt handig is

Giraffe / Saturn test-fixtures

Je hebt een JSON-body nodig om in een test naar een Giraffe-endpoint te POSTen. Plak de command-record, pak de payload, erin in de spec.

Fable front-end mocks

Zet je F# domain-records om in mock JSON-responses voor een Fable- of Elmish-front-end — geen handgeschreven JS-objecten meer die afdwalen van de types.

Azure Functions payloads

Genereer de JSON-body die je nodig hebt om een in F# geschreven Azure Function aan te roepen — werkt lekker als je aan de input-shape aan het itereren bent.

Docs die bij je types passen

Produceer JSON-samples voor API-documentatie of een README direct vanuit je echte records, zodat de docs nooit achterlopen.

Veelgestelde vragen

Hoe worden Option types geserialiseerd?

Some x wordt de waarde x; None wordt JSON null. Dat matcht het default-gedrag van Thoth.Json en de F#-converter in System.Text.Json.

Hoe zien discriminated unions eruit in JSON?

Default: {"Case":"CaseName","Fields":[...]} — het tagged format dat netjes round-tript naar F#. Als de code custom attributen gebruikt (JsonUnionCase of vergelijkbaar), respecteert de converter die en emit in plaats daarvan de op maat gemaakte vorm.

Hoe gaat hij om met DateTime, DateTimeOffset, Guid?

DateTime en DateTimeOffset komen eruit als ISO-8601-strings. Guid is een standaard 8-4-4-4-12 hex-string. Dat is wat System.Text.Json out of the box oplevert.

Lists, arrays, maps — hoe mappen die?

list, array en seq worden allemaal JSON-arrays. Map<string, 'T> wordt een JSON-object. Tuples worden JSON-arrays met gemengde types, precies wat de .NET-serializers produceren.

Kan ik een hele module plakken?

Ja. Elke top-level record en union wordt zijn eigen JSON-entry, met geneste records uitgevouwen. let-bindings die sample-waarden bouwen worden ook opgepikt — handig als je een test-data-module hebt.

Wordt mijn code opgeslagen?

Je F# gaat voor de conversie naar de backend en wordt niet bewaard — we loggen de payload niet. Voor gevoelige domain-code: kijk het even na voor je plakt.

Andere tools die je misschien nodig hebt

F# naar JSON is één stukje. Deze gaan er goed mee samen: