左側に F# を貼り付けて 「変換」 をクリックしてください — JSON に変換しますF# コードを貼り付け

このツールでできること

F# の record や判別共用体があって、テスト、HTTP 呼び出し、.NET 連携のために JSON ペイロードが必要なとき、手書きは面倒です。ここに F# を貼り付ければ、妥当な JSON が返ってきます。record 一つでも、いくつかのケースを持つ union でも、モジュール全体でも — 同じ流れです。

コンバーターは、F# コードでよく使われる JSON ライブラリの挙動に従います。F# コンバーターを組み込んだ System.Text.JsonNewtonsoft.Json、そして Thoth.Json はいずれも record のフィールドを JSON のキーに変換します — ここでもまさにそれが起きます。intfloatdecimalbigint は JSON の数値になります。bool はそのまま真偽値です。DateTimeDateTimeOffset は ISO-8601 文字列として出力されます。string optionSome x なら値を、None なら null を出します。

判別共用体は判別子付きでシリアライズされ、JSON がきれいにラウンドトリップします。type Status = | Paid | Refunded of Guid{"Case":"Refunded","Fields":["..."]} として出力されるか、JsonUnionCase 属性が付いていればそのカスタムタグ形式になります — dotnet/fsharp チームのシリアライザーが生成する形と同じです。lists、arrays、sequences はすべて JSON 配列になります。Map<string, 'T> は JSON オブジェクトに、tuples は JSON 配列になります。F# の慣用的なモデリングをさらに深掘りしたいなら、fsharpforfunandprofit.com をブックマークしておくと便利です。

使い方

3 ステップです。record 一つでも Domain.fs 全体でも同じ流れです。

1

F# を貼り付ける(またはサンプルを試す)

左のエディタに F# をそのまま貼り付けます。record判別共用体{ ... } 構文を使った record のインスタンス、あるいは 複数の型 — どれでも OK です。リアルな例を見たいときは サンプルを読み込む をクリックしてください。

modulenamespaceopen、属性宣言はそのままで大丈夫です — パーサーは必要ないものを無視します。公式の F# 言語リファレンス が頼りになります。

2

変換をクリック

緑色の 変換 ボタンをクリックします。ツールが F# を読み、record の各フィールドと union の各ケースをたどって、一度で JSON を生成します。実行中は短いローディングインジケーターが表示されます。

3

JSON をコピー

右側のパネルにインデント済みの JSON が表示されます。Giraffe や Saturn のリクエスト、xUnit のフィクスチャ、Fable のテスト、あるいは API ドキュメントに貼り付けて使ってください。

実際に役立つ場面

Giraffe / Saturn のテストフィクスチャ

テストで Giraffe エンドポイントに POST する JSON ボディが必要なとき。コマンドの record を貼り付けてペイロードを取得し、spec に差し込むだけです。

Fable フロントエンドのモック

F# のドメイン record を Fable や Elmish のフロントエンド用のモック JSON レスポンスに変換できます — 型から乖離する手書きの JS オブジェクトとはもうおさらばです。

Azure Functions のペイロード

F# で書かれた Azure Function を呼び出すための JSON ボディを生成できます — 入力の形を試行錯誤しているときに重宝します。

型と一致するドキュメント

実際の record から直接、API ドキュメントや README 用の JSON サンプルを生成できるので、ドキュメントが遅れを取ることがありません。

よくある質問

Option 型はどうシリアライズされますか?

Some x は値 x になり、None は JSON の null になります。これは Thoth.JsonSystem.Text.Json の F# コンバーターのデフォルト挙動と一致します。

判別共用体は JSON ではどう表現されますか?

デフォルトでは {"Case":"CaseName","Fields":[...]} — F# にラウンドトリップ可能なタグ付きフォーマットです。コードがカスタム属性(JsonUnionCase など)を使っている場合は、コンバーターがそれを尊重して調整された形を出力します。

DateTime、DateTimeOffset、Guid はどう扱われますか?

DateTimeDateTimeOffset は ISO-8601 文字列として出力されます。Guid は標準的な 8-4-4-4-12 の 16 進文字列になります。System.Text.Json の素の動作と同じです。

lists、arrays、maps はどうマップされますか?

listarrayseq はすべて JSON 配列になります。Map<string, 'T> は JSON オブジェクトになります。tuples は混合型の JSON 配列になり、.NET シリアライザーが生成するものと同じです。

モジュール全体を貼り付けてもいいですか?

はい。トップレベルの record と union はそれぞれ独自の JSON エントリになり、ネストされた record は展開されます。サンプル値を組み立てる let バインディングも拾われます — テストデータ用のモジュールがあるときに便利です。

貼り付けたコードは保存されますか?

F# は変換のためにバックエンドへ送られますが保持しません — ペイロードはログにも残しません。機密性の高いドメインコードは、貼り付ける前に確認してください。

一緒に使えるツール

F# から JSON はあくまで一部です。こちらと相性が良いです: