左側に C++ を貼り付けて 「変換」をクリック — JSON に変換しますC++ のコードを貼り付け

このツールでできること

C++ の struct と対になる JSON ペイロードが欲しくなった経験 — API に渡す、フィクスチャに使う、設定ファイルに落とし込む — があれば、いつもの流れはご存じのはずです。nlohmann::json を引き込み、to_json のグルーコードを書き、ビルドし直す。ここに C++ を貼り付ければ、そのどれも踏まずに有効な JSON が返ります。単一の初期化子でも、複数の struct を詰め込んだヘッダファイル一式でも、ネストした template 祭りでも — 結果は同じで、フィールドが保たれた素直な JSON ドキュメントになります。

コンバーターは C++ の値が実際にどうシリアライズされるかを理解しています。std::string は JSON の文字列へ、49.99f42u のような数値リテラルはサフィックスを落とした JSON 数値へ、booltrue/false へ、std::vector<T> / std::array<T,N> は JSON 配列へ。std::optional<T>std::nullopt なら null に、値があれば中身の型をそのままシリアライズします。文字列キーを持つ std::mapstd::unordered_map は、cppreference の流儀どおり JSON オブジェクトになります。

C++20 の指示付き初期化子(.field = value)も、集成体の初期化子リストも扱えます。複数の struct をまとめて貼り付ければ、それぞれが JSON のトップレベルエントリとして並び、ネストした型も展開されます。Boost.JSON の世界から来た方なら、boost::json::value_from の出力とほぼ同じもの、と考えて差し支えありません — template のアクロバットは抜きで。

使い方

3 ステップです。単一の初期化子リストでも、struct が 10 個以上詰まったヘッダでも同じ流れ。

1

C++ を貼り付ける(またはサンプルを読み込む)

左側のエディタに C++ をそのまま流し込んでください。struct 定義クラス初期化子リスト複数の型ネストした構造 — どれでも大丈夫です。まず現実的な例を見たいときは 「サンプルを読み込む」 をクリックしてください。

#include ディレクティブ、名前空間、template を剥がす必要はありません。C++ の構文 はそのままで大丈夫 — パーサー側で処理します。規格そのものを参照したいときは、ISO C++ に公式の資料があります。

2

「変換」を押す

緑色の 「変換」 ボタンをクリックすると、ツールが C++ を読み取り、すべての struct とフィールドを保持したまま JSON を一気に出力します。処理中は短いロード表示が出ます。

3

JSON をコピー

右側のパネルにインデント済みの JSON が表示されます。REST 呼び出し、テストフィクスチャ、CMakeLists の近くに置く設定、ドキュメントなどに貼り込んでください。これで一周です。

実際に便利な場面

API リクエストのペイロード

C++ のリクエスト struct があって、curl や Postman に投げる JSON が欲しい。struct を貼り付けて、JSON を持ち帰り、次の作業へ。

設定ファイルのテンプレート

メンバーが 40 個ある Settings 構造体が、そのまま編集できる JSON テンプレートに。手書きの足場も、書き忘れのキーも不要です。

コードとズレないドキュメント

README や API リファレンス用の JSON 例を、実際の struct から生成。ドキュメントが実装から乖離していく問題を止められます。

テストフィクスチャとシード

ユニットテストの初期化子リストを、そのまま統合テスト・モックサーバー・DB ローダー用の JSON シードへ変換できます。

よくある質問

nlohmann::json や Boost をインストールする必要はありますか?

いいえ。このツールはサーバーサイドで動き、あなたのコードを実行することはありません — シリアライズライブラリを入れなくても JSON が手に入ります。ランタイムでライブラリを使いたいなら、nlohmann/jsonBoost.JSON はどちらも堅実な選択です。

std::optional、std::variant、スマートポインタは扱えますか?

std::optional<T>std::nullopt なら null、値があれば中身の型をシリアライズします。std::unique_ptrstd::shared_ptr も同じ扱いで、空なら null、そうでなければ指している値を出します。std::variant は、その時点でアクティブな選択肢を使います。

std::vector や std::map のようなコンテナはどうなりますか?

std::vectorstd::arraystd::liststd::setstd::deque はすべて JSON 配列になります。文字列キーの std::map / std::unordered_map は JSON オブジェクトに、文字列以外のキーは cppreference のコンテナセマンティクスに従って文字列化されます。

複数の struct を一度に貼り付けても大丈夫?

はい — ヘッダ一式でも .cpp ファイルでも貼り付けてください。トップレベルの集成体がそれぞれ JSON の独自キーとして出力され、ネストした型も展開されます。基底クラスから継承したメンバーも含みます。

送ったコードは保存されますか?

コードは変換のためにバックエンドへ送られますが、永続化はしていません — ペイロードのログも取っていません。とはいえ、本当に機密性の高いコードを貼る前に、一度目を通しておくことをおすすめします。

template やマクロ、ラムダが含まれていたら?

具体型で実体化された template は問題なく動きます。未実体化の template、マクロ、ラムダは、変換全体を落とすのではなく null として出力するので、残りのデータはそのまま出てきます。明らかな構文エラーは先に直してください — パーサーは寛容ですが、コンパイラそのものではありません。

あわせて使える他のツール

C++ to JSON はパズルの 1 ピースです。これらは相性がよいです: