Colle du F# à gauche et clique sur "Convertir" — on te le transforme en JSONColle ton code F#

Ce que fait cet outil

Si tu as un record ou une union discriminée F# et qu'il te faut un payload JSON pour un test, un appel HTTP ou une intégration .NET, écrire le body à la main, c'est pénible. Colle le F# ici et tu récupères du JSON valide. Un record, une union avec quelques cas, ou un module entier — même flux.

Le convertisseur suit le comportement des bibliothèques JSON les plus courantes en F#. System.Text.Json avec le converter F#, Newtonsoft.Json, et Thoth.Json transforment tous les champs de record en clés JSON — exactement ce qui se passe ici. int, float, decimal et bigint deviennent des nombres JSON. bool reste un booléen. DateTime et DateTimeOffset sortent en chaînes ISO-8601. string option émet la valeur quand c'est Some x, ou null quand c'est None.

Les unions discriminées sont sérialisées avec un discriminant pour que le JSON fasse un round-trip propre. Un type Status = | Paid | Refunded of Guid sort en {"Case":"Refunded","Fields":["..."]}, ou sous une forme taguée personnalisée quand des attributs JsonUnionCase sont présents — ce que produisent les sérialiseurs de l'équipe dotnet/fsharp. Les listes, arrays et séquences deviennent des tableaux JSON. Map<string, 'T> devient un objet JSON. Les tuples deviennent des tableaux JSON. Si tu veux aller plus loin sur la modélisation F# idiomatique, fsharpforfunandprofit.com mérite un bookmark.

Comment l'utiliser

Trois étapes. Même flux que tu colles un seul record ou un Domain.fs complet.

1

Colle ton F# (ou essaie l'exemple)

Balance ton F# tel quel dans l'éditeur de gauche. Un record, une union discriminée, une instance de record en syntaxe { ... }, ou plusieurs types — tout passe. Clique sur Charger un exemple pour un cas réaliste.

Garde les déclarations module, namespace, open et les attributs — le parser ignore ce dont il n'a pas besoin. La référence officielle du langage F# est un bon recours.

2

Clique sur Convertir

Clique sur le bouton vert Convertir. L'outil lit le F#, parcourt chaque champ de record et chaque cas d'union, et produit le JSON en une seule passe. Un petit indicateur de chargement s'affiche pendant l'exécution.

3

Copie le JSON

Le panneau de droite se remplit de JSON indenté. Colle-le dans une requête Giraffe ou Saturn, dans une fixture xUnit, dans un test Fable, ou dans la doc de ton API.

Quand ça sert vraiment

Fixtures de tests Giraffe / Saturn

Il te faut un body JSON pour POSTer sur un endpoint Giraffe dans un test. Colle le record de commande, récupère le payload, balance-le dans le spec.

Mocks front-end Fable

Transforme tes records de domaine F# en réponses JSON mockées pour un front-end Fable ou Elmish — fini les objets JS tapés à la main qui s'écartent des types.

Payloads Azure Functions

Génère le body JSON qu'il te faut pour appeler une Azure Function écrite en F# — très pratique quand tu itères sur la forme de l'input.

Docs qui collent à tes types

Produis des exemples JSON pour la doc d'API ou un README directement depuis tes vrais records, pour que la doc ne décroche jamais.

Questions fréquentes

Comment les types Option sont-ils sérialisés ?

Some x devient la valeur x ; None devient null en JSON. C'est le comportement par défaut de Thoth.Json et du converter F# dans System.Text.Json.

À quoi ressemblent les unions discriminées en JSON ?

Par défaut : {"Case":"CaseName","Fields":[...]} — le format tagué qui fait round-trip vers F#. Si le code utilise des attributs personnalisés (JsonUnionCase ou équivalent), le convertisseur les respecte et émet la forme sur-mesure.

Comment gère-t-il DateTime, DateTimeOffset, Guid ?

DateTime et DateTimeOffset sortent en chaînes ISO-8601. Guid est une chaîne hex standard 8-4-4-4-12. C'est ce que System.Text.Json produit par défaut.

Listes, arrays, maps — comment sont-ils mappés ?

list, array et seq deviennent tous des tableaux JSON. Map<string, 'T> devient un objet JSON. Les tuples deviennent des tableaux JSON de types mélangés, comme ce que produisent les sérialiseurs .NET.

Je peux coller un module entier ?

Oui. Chaque record et union de top-level devient sa propre entrée JSON, avec les records imbriqués développés. Les let-bindings qui construisent des valeurs d'exemple sont récupérés aussi — pratique pour un module de données de test.

Mon code est-il stocké ?

Ton F# est envoyé au backend pour la conversion et n'est pas persisté — on ne log pas le payload. Pour du code de domaine sensible, relis avant de coller.

Autres outils qui peuvent servir

F# vers JSON, c'est une pièce. Ceux-là vont bien avec :