Konwerter F# na JSON
Wklej recordy albo uniony F#. Dostajesz czysty JSON.
Co robi to narzędzie
Jeśli masz record albo discriminated union w F# i potrzebujesz payloadu JSON do testu, wywołania HTTP albo integracji z .NET, klepanie body z ręki to upierdliwa robota. Wklej F# tutaj i dostajesz prawidłowy JSON. Jeden record, union z kilkoma case'ami, albo cały moduł — ten sam flow.
Konwerter trzyma się zachowania bibliotek JSON, których używa większość kodu F#. System.Text.Json z converterem F#, Newtonsoft.Json i Thoth.Json zamieniają pola recordów w klucze JSON — i dokładnie to dzieje się tutaj. int, float, decimal i bigint stają się liczbami JSON. bool zostaje booleanem. DateTime i DateTimeOffset wychodzą jako stringi ISO-8601. string option emituje wartość przy Some x albo null przy None.
Discriminated uniony serializują się z dyskryminatorem, żeby JSON ładnie zrobił round-trip. type Status = | Paid | Refunded of Guid wychodzi jako {"Case":"Refunded","Fields":["..."]} albo w customowej tagowanej formie, jeśli są atrybuty JsonUnionCase — zgodnie z tym, co produkują serializery zespołu dotnet/fsharp. Listy, tablice i sequence'y stają się tablicami JSON. Map<string, 'T> staje się obiektem JSON. Krotki stają się tablicami JSON. Jak chcesz głębiej wejść w idiomatyczne modelowanie w F#, warto zabookmarkować fsharpforfunandprofit.com.
Jak tego użyć
Trzy kroki. Działa tak samo, czy wklejasz jeden record, czy cały Domain.fs.
Wklej swój F# (albo spróbuj przykładu)
Wrzuć swój F# jak leci do lewego edytora. Record, discriminated union, instancja recordu w składni { ... }, albo kilka typów — wszystko OK. Kliknij Załaduj przykład, żeby zobaczyć realistyczny przypadek.
Spokojnie zostaw deklaracje module, namespace, open i atrybuty — parser olewa to, czego nie potrzebuje. Oficjalna referencja języka F# to dobry backup.
Kliknij Konwertuj
Kliknij zielony przycisk Konwertuj. Narzędzie czyta F#, przechodzi przez każde pole recordu i każdy case uniona, i produkuje JSON w jednym przelocie. Podczas działania pojawia się krótki wskaźnik ładowania.
Skopiuj JSON
Prawy panel wypełnia się wcięciowym JSON-em. Wklej go w request Giraffe albo Saturna, w fixture xUnita, w test Fable, albo w dokumentację swojego API.
Kiedy to naprawdę ratuje skórę
Fixture testów Giraffe / Saturn
Potrzebujesz body JSON, żeby w teście zrobić POST na endpoint Giraffe. Wklej record komendy, dostajesz payload, wrzucasz do speca.
Mocki front-endu Fable
Zamień swoje domenowe recordy F# w mockowe odpowiedzi JSON dla front-endu Fable albo Elmisha — koniec z klepanymi z ręki obiektami JS, które odklejają się od typów.
Payloady Azure Functions
Wygeneruj body JSON, żeby wywołać Azure Function napisaną w F# — działa super, jak iterujesz nad kształtem inputu.
Docsy zgodne z twoimi typami
Twórz próbki JSON do dokumentacji API albo README bezpośrednio ze swoich prawdziwych recordów, żeby docsy nigdy nie zostały w tyle.
Częste pytania
Jak serializowane są typy Option?
Some x staje się wartością x; None staje się JSON-owym null. Pasuje do domyślnego zachowania Thoth.Json i F#-owego convertera w System.Text.Json.
Jak wyglądają discriminated uniony w JSON-ie?
Domyślnie: {"Case":"CaseName","Fields":[...]} — tagowany format, który robi round-trip z powrotem do F#. Jeśli kod używa customowych atrybutów (JsonUnionCase albo podobnych), konwerter je respektuje i zamiast tego emituje dopasowany kształt.
Jak obsługuje DateTime, DateTimeOffset, Guid?
DateTime i DateTimeOffset wychodzą jako stringi ISO-8601. Guid to standardowy string hex w formacie 8-4-4-4-12. To samo, co domyślnie daje System.Text.Json.
Listy, tablice, mapy — jak się mapują?
list, array i seq stają się tablicami JSON. Map<string, 'T> staje się obiektem JSON. Krotki stają się tablicami JSON z mieszanymi typami, tak jak produkują serializery .NET.
Mogę wkleić cały moduł?
Tak. Każdy top-levelowy record i union staje się własnym wpisem JSON, z rozwiniętymi recordami zagnieżdżonymi. let-bindings konstruujące przykładowe wartości też są łapane — przydatne, jak masz moduł z danymi testowymi.
Czy mój kod jest przechowywany?
Twój F# leci do backendu do konwersji i nie jest persystowany — nie logujemy payloadu. Przy wrażliwym kodzie domenowym warto rzucić okiem przed wklejeniem.
Inne narzędzia, które mogą ci się przydać
F# na JSON to jeden kawałek układanki. Te dobrze z nim grają: