F# til JSON Converter
Indsæt F# records eller unions. Få ren JSON tilbage.
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.
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.
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.
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: