Sola F# yapıştır ve "Dönüştür"e tıkla — biz onu JSON'a çeviririzF# kodu yapıştır

Bu araç ne yapar

Elinde bir F# record'u ya da discriminated union varsa ve bir test, HTTP çağrısı veya .NET entegrasyonu için JSON payload'ına ihtiyacın varsa, body'yi elle yazmak zahmetlidir. F#'ı buraya yapıştır, geçerli JSON'ı geri al. Tek record, birkaç case'li bir union ya da bütün bir modül — aynı akış.

Dönüştürücü, F# kodunun çoğunun kullandığı JSON kütüphanelerinin davranışını takip eder. F# converter'lı System.Text.Json, Newtonsoft.Json ve Thoth.Json record alanlarını JSON anahtarlarına dönüştürür — burada da aynen öyle oluyor. int, float, decimal ve bigint JSON sayısına dönüşür. bool boolean olarak kalır. DateTime ve DateTimeOffset ISO-8601 string'i olarak çıkar. string option, Some x olduğunda değeri, None olduğunda null'ı verir.

Discriminated union'lar bir ayırt edici ile serileştirilir ki JSON temiz şekilde round-trip yapabilsin. type Status = | Paid | Refunded of Guid, {"Case":"Refunded","Fields":["..."]} olarak veya JsonUnionCase attribute'ları varsa özel etiketli bir şekil olarak çıkar — dotnet/fsharp ekibinin serializer'larının ürettiğiyle aynı. List, array ve sequence'ler JSON dizisine dönüşür. Map<string, 'T> bir JSON nesnesine, tuple'lar JSON dizisine dönüşür. Deyimsel F# modellemesine daha derin bir dalış istiyorsan, fsharpforfunandprofit.com'u favorilere eklemeye değer.

Nasıl kullanılır

Üç adım. Tek bir record yapıştırsan da bütün bir Domain.fs&#39;yi yapıştırsan da aynı işliyor.

1

F#&#39;ını yapıştır (ya da örneği dene)

F#'ını olduğu gibi soldaki editöre bırak. Bir record, bir discriminated union, { ... } söz dizimini kullanan bir record instance'ı ya da birden fazla tip — hepsi olur. Gerçekçi bir örnek için Örnek Yükle'ye tıkla.

module, namespace, open ve attribute bildirimlerini dokunmadan bırak — parser ihtiyacı olmayanı görmezden gelir. Resmi F# dil referansı iyi bir yedek kaynaktır.

2

Dönüştür&#39;e bas

Yeşil Dönüştür düğmesine tıkla. Araç F#'ı okur, her record alanını ve her union case'ini dolaşır ve JSON'ı tek geçişte üretir. Çalışırken kısa bir yükleme göstergesi görünür.

3

JSON&#39;ı kopyala

Sağ panel girintili JSON ile dolar. Bir Giraffe ya da Saturn isteğine, bir xUnit fixture'ına, bir Fable testine veya API dokümantasyonuna yapıştır.

Gerçekten işe yaradığı yerler

Giraffe / Saturn test fixture&#39;ları

Bir testte Giraffe endpoint&#39;ine POST etmek için JSON body&#39;ye ihtiyacın var. Command record&#39;unu yapıştır, payload&#39;ı al, spec&#39;e yerleştir.

Fable ön yüz mock&#39;ları

F# domain record&#39;larını bir Fable ya da Elmish ön yüz için mock JSON yanıtlarına çevir — tiplerden kayan elle yazılmış JS nesnelerine artık son.

Azure Functions payload&#39;ları

F# ile yazılmış bir Azure Function&#39;ı çağırmak için ihtiyacın olan JSON body&#39;yi üret — input şeklinde iterasyon yaparken çok işe yarar.

Tiplerinle uyumlu dokümanlar

API dokümantasyonu veya README için JSON örneklerini doğrudan gerçek record&#39;larından üret ki dokümanlar asla geride kalmasın.

Sık sorulan sorular

Option tipleri nasıl serileştirilir?

Some x, x değerine dönüşür; None ise JSON null'ına. Bu, Thoth.Json'un ve System.Text.Json'daki F# converter'ının varsayılan davranışıyla örtüşür.

Discriminated union&#39;lar JSON&#39;da nasıl görünür?

Varsayılan olarak: {"Case":"CaseName","Fields":[...]} — F#'a round-trip yapabilen etiketli format. Kod özel attribute'lar kullanıyorsa (JsonUnionCase veya benzeri), dönüştürücü bunlara saygı gösterir ve onun yerine özel şekli üretir.

DateTime, DateTimeOffset, Guid nasıl ele alınır?

DateTime ve DateTimeOffset ISO-8601 string'i olarak çıkar. Guid standart 8-4-4-4-12 hex string'idir. System.Text.Json'un kutudan çıkar çıkmaz verdiğiyle aynı.

List, array, map — nasıl eşlenir?

list, array ve seq'in hepsi JSON dizisine dönüşür. Map<string, 'T> JSON nesnesine dönüşür. Tuple'lar karışık tiplerle JSON dizisi olur, aynı .NET serializer'larının ürettiği gibi.

Bütün bir modülü yapıştırabilir miyim?

Evet. Her üst seviye record ve union kendi JSON girdisi olur ve iç içe record'lar açılır. Örnek değer inşa eden let-binding'ler de toplanır — test verisi modülün varsa çok yararlı.

Kodum saklanıyor mu?

F#'ın dönüşüm için backend'e gönderilir ve kalıcı hale getirilmez — payload'ı loglamayız. Hassas domain kodu için yapıştırmadan önce bir göz at.

İhtiyacın olabilecek diğer araçlar

F# to JSON bir parça. Bunlar onunla iyi eşleşir: