Cole F# à esquerda e clica em "Converter" — transformamos em JSONCole o código F#

O que esta ferramenta faz

Se você tem um record ou uma união discriminada em F# e precisa de um payload JSON para um teste, uma chamada HTTP ou uma integração com .NET, escrever o body na mão é chato. Cole o F# aqui e recebe um JSON válido. Um record, uma união com alguns casos, ou um módulo inteiro — mesmo fluxo.

O conversor segue o comportamento das bibliotecas JSON que a maioria do código F# usa. System.Text.Json com o converter de F#, Newtonsoft.Json e Thoth.Json transformam os campos do record em chaves JSON — é exatamente isso que acontece aqui. int, float, decimal e bigint viram números JSON. bool continua boolean. DateTime e DateTimeOffset saem como strings ISO-8601. string option emite o valor quando é Some x ou null quando é None.

As uniões discriminadas serializam com um discriminador para o JSON fazer round-trip limpo. Um type Status = | Paid | Refunded of Guid sai como {"Case":"Refunded","Fields":["..."]} ou com uma forma customizada quando tem atributos JsonUnionCase — combinando com o que os serializadores do time dotnet/fsharp produzem. Lists, arrays e sequências viram arrays JSON. Map<string, 'T> vira um objeto JSON. Tuples viram arrays JSON. Se quiser um mergulho mais fundo na modelagem idiomática de F#, vale favoritar fsharpforfunandprofit.com.

Como usar

Três passos. Funciona igual colando um record só ou um Domain.fs inteiro.

1

Cole seu F# (ou use o exemplo)

Solta seu F# do jeito que está no editor da esquerda. Um record, uma união discriminada, uma instância de record usando a sintaxe { ... }, ou vários tipos — tudo bem. Clica em Carregar exemplo para um caso realista.

Mantenha as declarações de module, namespace, open e atributos — o parser ignora o que não precisa. A referência oficial da linguagem F# é um bom apoio.

2

Clica em Converter

Clica no botão verde Converter. A ferramenta lê o F#, percorre cada campo de record e cada caso de union, e produz o JSON numa passada só. Um indicador de carregamento rápido aparece enquanto roda.

3

Copia o JSON

O painel da direita enche com JSON indentado. Cola em uma request Giraffe ou Saturn, num fixture xUnit, num teste Fable, ou na documentação da sua API.

Quando isso realmente ajuda

Fixtures de teste Giraffe / Saturn

Você precisa de um body JSON para dar POST num endpoint Giraffe num teste. Cola o record do comando, pega o payload, joga no spec.

Mocks de front-end Fable

Transforme seus records de domínio F# em respostas JSON simuladas para um front-end Fable ou Elmish — chega de objetos JS escritos à mão que desalinham com os tipos.

Payloads para Azure Functions

Gere o body JSON que você precisa para chamar uma Azure Function escrita em F# — funciona bem quando você está iterando no formato do input.

Docs que batem com seus tipos

Produza exemplos JSON para documentação de API ou um README direto dos seus records de verdade, para que os docs nunca fiquem defasados.

Perguntas comuns

Como os tipos Option são serializados?

Some x vira o valor x; None vira null em JSON. Isso combina com o comportamento padrão do Thoth.Json e do converter F# no System.Text.Json.

Como ficam as uniões discriminadas no JSON?

Por padrão: {"Case":"CaseName","Fields":[...]} — o formato tagueado que faz round-trip de volta pro F#. Se o código usa atributos customizados (JsonUnionCase ou similares), o conversor respeita e emite a forma customizada no lugar.

Como lida com DateTime, DateTimeOffset, Guid?

DateTime e DateTimeOffset saem como strings ISO-8601. Guid é uma string hex padrão 8-4-4-4-12. É o que o System.Text.Json dá por padrão.

Lists, arrays, maps — como mapeiam?

list, array e seq viram arrays JSON. Map<string, 'T> vira um objeto JSON. Tuples viram arrays JSON com tipos mistos, igual aos serializadores .NET produzem.

Posso colar um módulo inteiro?

Pode. Cada record e union de nível superior vira uma entrada JSON própria, com records aninhados expandidos. let-bindings que constroem valores de exemplo também são pegos — útil quando você tem um módulo de dados de teste.

Meu código é armazenado?

Seu F# é enviado para o backend para conversão e não é persistido — a gente não loga o payload. Para código de domínio sensível, revise antes de colar.

Outras ferramentas que podem ajudar

F# para JSON é uma peça. Estas combinam bem: