Indsæt F# til venstre og klik på "Konverter" — vi laver det om til JSONIndsæt F#-kode

Hvad værktøjet gør

Har du en F#-record eller en discriminated union, og skal du bruge en JSON-payload til en test, et HTTP-kald eller en .NET-integration, så er det trættende at skrive bodyen i hånden. Indsæt F#-koden her og få gyldig JSON tilbage. Én record, en union med et par cases, eller et helt modul — samme flow.

Konverteren følger opførslen hos de JSON-biblioteker, som det meste F#-kode bruger. System.Text.Json med F#-converteren, Newtonsoft.Json og Thoth.Json laver alle record-felter om til JSON-nøgler — og det er præcis det, der sker her. int, float, decimal og bigint bliver til JSON-numre. bool forbliver boolean. DateTime og DateTimeOffset kommer ud som ISO-8601-strenge. string option udsender værdien ved Some x eller null ved None.

Discriminated unions serialiseres med en diskriminator, så JSON round-tripper rent. Et type Status = | Paid | Refunded of Guid kommer ud som {"Case":"Refunded","Fields":["..."]} eller i en skræddersyet tagget form, hvis JsonUnionCase-attributter er til stede — svarende til det, som serializers fra dotnet/fsharp-holdet producerer. Lists, arrays og sequences bliver til JSON-arrays. Map<string, 'T> bliver til et JSON-objekt. Tuples bliver til JSON-arrays. Vil du dykke dybere ned i idiomatisk F#-modellering, er fsharpforfunandprofit.com et bogmærke værd.

Sådan bruger du det

Tre trin. Virker ens om du indsætter én record eller et helt Domain.fs.

1

Indsæt din F# (eller prøv eksemplet)

Smid din F# ind som den er i venstre editor. En record, en discriminated union, en record-instans med { ... }-syntaks, eller flere typer — alt går. Klik på Indlæs eksempel for et realistisk tilfælde.

Lad roligt module, namespace, open og attributdeklarationer stå — parseren ignorerer det, den ikke skal bruge. Den officielle F# language reference er et godt backup.

2

Tryk Konverter

Klik på den grønne Konverter-knap. Værktøjet læser F#-koden, løber gennem hvert record-felt og hvert union-case, og producerer JSON i ét hug. En kort loading-indikator viser sig, mens det kører.

3

Kopier JSON

Højre panel fyldes med indrykket JSON. Indsæt det i en Giraffe- eller Saturn-request, en xUnit-fixture, en Fable-test, eller din API-dokumentation.

Hvornår det virkelig er smart

Giraffe / Saturn-testfixtures

Du skal bruge en JSON-body til at POSTe til et Giraffe-endpoint i en test. Indsæt command-recorden, hent payloaden, ind med den i specen.

Fable front-end-mocks

Lav dine F# domæne-records om til mockede JSON-svar til en Fable- eller Elmish-frontend — slut med håndlavede JS-objekter, der driver væk fra typerne.

Azure Functions-payloads

Generer den JSON-body, du skal bruge for at kalde en Azure Function skrevet i F# — virker fint, når du itererer på input-formen.

Docs der matcher dine typer

Producer JSON-eksempler til API-dokumentation eller et README direkte fra dine rigtige records, så docsene aldrig halter bagud.

Typiske spørgsmål

Hvordan serialiseres Option types?

Some x bliver til værdien x; None bliver til JSON null. Det matcher defaultopførslen hos Thoth.Json og F#-converteren i System.Text.Json.

Hvordan ser discriminated unions ud i JSON?

Som default: {"Case":"CaseName","Fields":[...]} — det taggede format, der round-tripper tilbage til F#. Hvis koden bruger egne attributter (JsonUnionCase eller lignende), respekterer konverteren dem og udsender den skræddersyede form i stedet.

Hvordan håndteres DateTime, DateTimeOffset, Guid?

DateTime og DateTimeOffset kommer ud som ISO-8601-strenge. Guid er en standard 8-4-4-4-12 hex-streng. Det er, hvad System.Text.Json giver out of the box.

Lists, arrays, maps — hvordan mappes de?

list, array og seq bliver alle til JSON-arrays. Map<string, 'T> bliver til et JSON-objekt. Tuples bliver til JSON-arrays med blandede typer, ligesom .NET-serializers producerer.

Kan jeg indsætte et helt modul?

Ja. Hver top-level record og union bliver til sin egen JSON-indgang, med indlejrede records udfoldet. let-bindings, der konstruerer sample-værdier, bliver også opfanget — praktisk, hvis du har et testdata-modul.

Bliver min kode gemt?

Din F# sendes til backenden til konvertering og persisteres ikke — vi logger ikke payloaden. Ved følsom domænekode: gennemse den, før du indsætter.

Andre værktøjer du måske skal bruge

F# til JSON er ét stykke. Disse spiller godt sammen med det: