Pega F# a la izquierda y pulsa "Convertir" — lo transformamos en JSONPega código F#

Qué hace esta herramienta

Si tienes un record o una unión discriminada de F# y necesitas un payload JSON para un test, una llamada HTTP o una integración con .NET, escribir el body a mano es un fastidio. Pega el F# aquí y recuperas JSON válido. Un record, una unión con unos cuantos casos, o un módulo entero — mismo flujo.

El conversor sigue el comportamiento de las librerías JSON que la mayoría del código F# usa. System.Text.Json con el converter de F#, Newtonsoft.Json y Thoth.Json convierten los campos del record en claves JSON — eso es justo lo que pasa aquí. int, float, decimal y bigint se vuelven números JSON. bool sigue siendo booleano. DateTime y DateTimeOffset salen como strings ISO-8601. string option emite el valor cuando es Some x o null cuando es None.

Las uniones discriminadas se serializan con un discriminador para que el JSON haga round-trip limpio. Un type Status = | Paid | Refunded of Guid sale como {"Case":"Refunded","Fields":["..."]} o con una forma etiquetada personalizada cuando hay atributos JsonUnionCase — igual que producen los serializadores del equipo dotnet/fsharp. Las listas, arrays y secuencias se vuelven arrays JSON. Map<string, 'T> se vuelve un objeto JSON. Las tuplas se vuelven arrays JSON. Si prefieres profundizar en el modelado idiomático de F#, vale la pena marcar fsharpforfunandprofit.com.

Cómo usarlo

Tres pasos. Funciona igual si pegas un solo record o un Domain.fs entero.

1

Pega tu F# (o prueba el ejemplo)

Suelta tu F# tal cual en el editor de la izquierda. Un record, una unión discriminada, una instancia de record usando la sintaxis { ... } o varios tipos — todo vale. Pulsa Cargar ejemplo para ver un caso realista.

Mantén las declaraciones module, namespace, open y los atributos — el parser ignora lo que no necesita. La referencia oficial del lenguaje F# es un buen respaldo.

2

Pulsa Convertir

Haz clic en el botón verde Convertir. La herramienta lee el F#, recorre cada campo de record y cada caso de unión, y produce el JSON en una sola pasada. Aparece un pequeño indicador de carga mientras corre.

3

Copia el JSON

El panel derecho se llena con JSON indentado. Pégalo en una petición de Giraffe o Saturn, en un fixture de xUnit, en un test de Fable, o en la documentación de tu API.

Cuándo viene bien de verdad

Fixtures de tests para Giraffe / Saturn

Necesitas un body JSON para hacer POST a un endpoint de Giraffe en un test. Pega el record del comando, obtén el payload y mételo en el spec.

Mocks para front-end con Fable

Convierte tus records de dominio F# en respuestas JSON simuladas para un front-end Fable o Elmish — se acabaron los objetos JS a mano que se desincronizan de los tipos.

Payloads para Azure Functions

Genera el body JSON que necesitas para llamar a una Azure Function escrita en F# — muy útil cuando estás iterando sobre la forma del input.

Docs que cuadran con tus tipos

Produce ejemplos JSON para la documentación de la API o un README directamente desde tus records reales, para que los docs nunca se queden atrás.

Preguntas habituales

¿Cómo se serializan los tipos Option?

Some x se convierte en el valor x; None se convierte en null de JSON. Coincide con el comportamiento por defecto de Thoth.Json y del converter F# de System.Text.Json.

¿Qué aspecto tienen las uniones discriminadas en JSON?

Por defecto: {"Case":"CaseName","Fields":[...]} — el formato etiquetado que hace round-trip de vuelta a F#. Si el código usa atributos personalizados (JsonUnionCase o similares), el conversor los respeta y emite la forma a medida.

¿Cómo maneja DateTime, DateTimeOffset y Guid?

DateTime y DateTimeOffset salen como strings ISO-8601. Guid es un string hex estándar 8-4-4-4-12. Coincide con lo que te da System.Text.Json de serie.

Listas, arrays, maps — ¿cómo se mapean?

list, array y seq se vuelven arrays JSON. Map<string, 'T> se vuelve un objeto JSON. Las tuplas se vuelven arrays JSON con tipos mixtos, igual que producen los serializadores de .NET.

¿Puedo pegar un módulo entero?

Sí. Cada record y unión de nivel superior se convierte en su propia entrada JSON, con los records anidados expandidos. Los let-bindings que construyen valores de ejemplo también se recogen — útil cuando tienes un módulo de datos de prueba.

¿Guardáis mi código?

Tu F# se envía al backend para la conversión y no se persiste — no registramos el payload. Para código de dominio sensible, revísalo antes de pegarlo.

Otras herramientas que te pueden venir bien

F# a JSON es una pieza. Estas combinan bien con ella: